一些常用的Linux命令
记录一些常用的命令
原始文件example_linux
item_id,month,total,price
2638,201801,1684,142
4120,201801,93,24
949976,201801,46,5
457,201801,4051,98
871603,201801,167,28
4120,201801,93,24
317120,201801,61,2
842465,201801,608,32
find命令
find ~ -iname example_linux 从当前用户目录下面找example_linux文件,忽略大小写
sort命令
sort -n 按照数字排序(默认按字典序排)
sort -k 按照第几列排序
sort -t 每列的分隔符,默认空格
sort -r 倒序(默认升序)
sort -f 忽略大小写
sort -u 排序并去重
sort -m 合并文件
sort -t, -n -k 3 example_linux 表示按第三列以整数排序,也可以写为如下
sort -t, -k 3n example_linux
item_id,month,total,price
949976,201801,46,5
317120,201801,61,2
4120,201801,93,24
4120,201801,93,24
871603,201801,167,28
842465,201801,608,32
457,201801,4051,98
2638,201801,1684,142
-k的参数的语法格式需要理解下,分为Start和End两大部分
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
Modifier: 表示-n、-r、-f(忽略大小写)等操作
FStart/FEnd:分隔符分成了若干个域,这里指定从第几个域开始/结束
如果FEnd不指定,表示到行尾
CStart/CEnd:从域的第几个字符作为首字符进行排序
如果CStart不指定,表示从指定域的第一个字符开始
如果CEnd不指定,表示到域尾
例如,我想按example_linux第一列进行排序,
如果写为 sort -t, -k 1n example_linux
表示从从第一个域开始比较,一直比较到行尾,结果为
item_id,month,total,price
4120,201801,93,24
4120,201801,93,24
317120,201801,61,2
457,201801,4051,98
949976,201801,46,5
2638,201801,1684,142
842465,201801,608,32
871603,201801,167,28
正确应该为 sort -t, -k 1n,1 example_linux
表示排序从第一个域开始,到第一个域结束,即只用第一个域排序
item_id,month,total,price
457,201801,4051,98
2638,201801,1684,142
4120,201801,93,24
4120,201801,93,24
317120,201801,61,2
842465,201801,608,32
871603,201801,167,28
949976,201801,46,5
uniq命令
uniq -c 显示连续出现这一行的数量
uniq -u 仅显示没有连续出现的行
uniq -d 显示连续出现的行
sort example_linux | uniq -c
1 2638,201801,1684,142
1 317120,201801,61,2
2 4120,201801,93,24
1 457,201801,4051,98
1 842465,201801,608,32
1 871603,201801,167,28
1 949976,201801,46,5
1 item_id,month,total,price
两个文件交集
sort a.txt b.txt | uniq -d
两个文件并集
sort a.txt b.txt | uniq
差集 a.txt-b.txt
sort a.txt b.txt b.txt | uniq -u
b.txt - a.txt
sort b.txt a.txt a.txt | uniq -u
awk命令
awk -F ',' '{print $1}' 默认是使用空格分割
awk -F ',' '/24/' example_linux 模式匹配需要用斜杠标识
4120,201801,93,24
4120,201801,93,24
842465,201801,608,32
awk -F ',' '!/24/' example_linux 模式匹配需要用斜杠标识,!表示非
awk -F ',' '{printf("line_number:%s,columns:%s,line:%s\n",NR,NF,$0)}' example_linux
line_number:1,columns:4,line:item_id,month,total,price
line_number:2,columns:4,line:2638,201801,1684,142
line_number:3,columns:4,line:4120,201801,93,24
line_number:4,columns:4,line:949976,201801,46,5
line_number:5,columns:4,line:457,201801,4051,98
line_number:6,columns:4,line:871603,201801,167,28
line_number:7,columns:4,line:4120,201801,93,24
line_number:8,columns:4,line:317120,201801,61,2
line_number:9,columns:4,line:842465,201801,608,32
awk -F ',' '{if(NR>=2 && NR<=4) {print $1}}' example_linux 带if条件
2638
4120
949976
awk -F ',' '{if($4 == 24) {print $0}}' example_linux
4120,201801,93,24
4120,201801,93,24
which命令
which grep 查找PATH下的命令路径
grep命令
grep -n '24' example_linux 显示包含24的行,且打印行号
3:4120,201801,93,24
7:4120,201801,93,24
9:842465,201801,608,32
ip与unzip命令
zip -r test.zip ./*
zip -r test.zip test
zip -r test.zip file1 file2 file3 filesdir 压缩指定文件和目录
unzip zip-file
unzip -d dst-dir zip-file 解压缩到指定目录
unzip -l e.zip 查看压缩文件内容
tar命令
tar cvf test.tar test 打包test文件或者目录
tar czvf test.tar.gz test 打包并压缩
tar xzvf test.tar.gz 还原并解压缩
grep命令
^ #匹配行的开始 如:'^grep'匹配所有以grep开头的行。
$ #匹配行的结束 如:'grep$'匹配所有以grep结尾的行。
. #匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p。
* #匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行。
.* #一起用代表任意字符。
[] #匹配一个指定范围内的字符,如'[Gg]rep'匹配Grep和grep。
[^] #匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头,紧跟rep的行。
\(..\) #标记匹配字符,如'\(love\)',love被标记为1。
\< #匹配单词的开始,如:'\<grep'匹配包含以grep开头的单词的行。
\> #匹配单词的结束,如'grep\>'匹配包含以grep结尾的单词的行。
x\{m\} #重复字符x,m次,如:'0\{5\}'匹配包含5个o的行。
x\{m,\} #重复字符x,至少m次,如:'o\{5,\}'匹配至少有5个o的行。
x\{m,n\} #重复字符x,至少m次,不多于n次,如:'o\{5,10\}'匹配5--10个o的行。
\w #匹配文字和数字字符,也就是[A-Za-z0-9],如:'G\w*p'匹配以G后跟零个或多个文字或数字字符,然后是p。
\W #\w的反置形式,匹配一个或多个非单词字符,如点号句号等。
\b #单词锁定符,如: '\bgrep\b'只匹配grep。