记录遇到的一些有用shell.
益达不八哥曾经说过:
A shell a day keeps the bug away.
已经知道的有用shell
- 获得文件行数:
wc -l filename
- 去除文本中的重复行:
sort -u filename
- 使文本按照某个列排序(该列是数字):
sort -t $"\t" -k5nr
– 上面的意思是, 该文件每列以TAB符号分隔, 需要对第5行k5数字n按倒序r排列 - 输出文件的某一列:
awk "{print $3}"
- 按照某种过滤规则输出某一列:
awk "/final_result\":\"1/{print $1}"
– 上述正则表示,寻找包含final_result":"1
的行, 打印第1列数据
– 良心站点: https://linux.cn/article-7586-1.html - 待补充…
20180921
给文本文件的每一行前面添加行号
awk '{printf("%5d : %s\n", NR,$0)}' filename > filenamenumbered
20180922
打印csv文件特定列, 指定分隔符(awk
默认是SPACE
和TAB
分隔)
$ awk -F "," '{print $2}' FILE
20180924
统计csv的文件某一列, 总共有多少类?(csv文件包含头)
awk -F "," 'NR>1{print $26}' train.csv|sort -u| wc -l
20181010
重定向nohup
的输出, 使同一目录下不同文件的nohup
可区分
nohup some_command > nohup2.out&
注: 某些回答里面说, 要写成
some_command &
, 但在我的机器上并不work
20190408
- 有些压缩文件并没有被tar压缩,而是仅仅用了gz,此时需要使用
gzip
解压
-c
表示输出到终端,这样一来就可以重定向到文件里。
-d
表示解压,因为gzip
默认是执行压缩功能。
gzip -dc part-1.gz > ../data/part1.txt
- 查看文件编码
https://www.tecmint.com/convert-files-to-utf-8-encoding-in-linux/
You can check the encoding of a file using the file command, by using the -i or --mime flag which enables printing of mime type string as in the examples below:
file -i Test.java
- 转换文件编码
查看了原始编码之后,就可以去修改相应的编码了。
iconv -f ISO-8859-1 -t UTF-8//TRANSLIT input.file -o out.file
- 打印列表列数、最后一列
NF
表示打印列数
$NF
表示打印最后一列
awk '{print NF}'
awk '{print $NF}'
20190415
shell的函数返回值到variable. 总体思想是用$()
捕捉输出
demofunc(){
local variable="hellow"
echo $variable
}
val=$(demofunc)
echo $val
20190418
shell重定向输出(1>&2 2>&1 &>file >&file)的区别
经常会用
xxx 2>&1
重定向错误输出到标准输出。
详细请参阅链接
20190419
在判断当前脚本进程运行数量的时候,经常使用
ps ux|grep -v grep|grep $0|awk '{print $2}'|wc -l
但是近期出现检测到多个实例的情况,其pid
不相同。
并且如果脚本被设定在crontab
里面,更是会额外检测到一个和crontab
对应的脚本,也会出现$0
进程。
现在这个问题尚未解决,目测可能是因为有source other_bash.sh
,导致检测到多重脚本。
20190422
不使用root
,适用当前用户权限安装pip
包
pip install package --user
--user
makes pip install packages in your home directory instead, which doesn’t require any special privileges.