shell awk 命令

2020-03-07  本文已影响0人  衣介书生

awk的最基本功能是在文件或者字符串抽取信息。通常awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本,几个常用的参数和命令。

// test.txt
aaa 10 20
bbb 20 30
aaa 30 10
ccc 40 5
ccc 20 10
ccc 40 6

第二列求和:

cat test.txt | awk '{sum += $2};END {print sum}'

第二列为值,第一列为 key,求每个 key 对应的所有值的和:

cat test.txt | awk '{sum[$1]+=$2} END {for(i in sum) print i,sum[i]}'

ccc 100
bbb 20
aaa 40

统计第一列的元素分别出现了几次:

cat test.txt |awk '{sum[$1]+=1}END{for(i in sum)print i,sum[i]}'

ccc 3
bbb 1
aaa 2

统计前两列元素出现的次数:

cat test.txt |awk '{sum[$1" "$2]++}END{for(i in sum)print i,sum[i]}'

bbb 20 1
aaa 10 1
ccc 20 1
aaa 30 1
ccc 40 2

打印文件名,每行的行号,每行的列数,对应的完整内容:

awk  -F ' '  '{print "filename:" FILENAME ",linenumber:" NR ",columns:" NF ",linecontent:"$0}' test.txt

filename:test.txt,linenumber:1,columns:3,linecontent:aaa 10 20
filename:test.txt,linenumber:2,columns:3,linecontent:bbb 20 30
filename:test.txt,linenumber:3,columns:3,linecontent:aaa 30 10
filename:test.txt,linenumber:4,columns:3,linecontent:ccc 40 5
filename:test.txt,linenumber:5,columns:3,linecontent:ccc 20 10
filename:test.txt,linenumber:6,columns:3,linecontent:ccc 40 6

打印第一列,最后一列,倒数第二列,第二行:

awk -F " " '{print $1}' test.txt
awk -F " " '{print $NF}' test.txt
awk -F " " '{print $NF-1}' test.txt
awk -F " " 'NR==2 {print "filename:" FILENAME " content:" $0}' test.txt

aaa
bbb
aaa
ccc
ccc
ccc

20
30
10
5
10

19
29
9
4
9
5

filename:test.txt content:bbb 20 30
上一篇 下一篇

猜你喜欢

热点阅读