linux(awk)

sed 可以编辑,只能按行整行提取
awk 不能编辑,可以按行分隔提取
grep 擅长过滤

awk -F: '{print $1,$3}' /etc/passwd
选项-F:表示指定:为分隔符(以空格分隔时要用"包起来,-F" "),‘’内填定位+命令,定位不填默认为所有行。{}内填命令,print为命令,$1为按:分隔后的第一项,$3为第三项,$0为整行内容
行定位:
awk -F: 'NR==1 {print $1,$3}' a.txt 第一行
awk -F: 'NR>=2&&NR<=5 {print $1,$3}' a.txt 2-5行
awk -F: 'NR>2&&NR<5 {print $1,$3}' a.txt 3-4行
awk -F: 'NR==3 || NR==5 || NR==7 {print $1,$4}' 3,5,7行
awk -F: 'NR<3 || NR>5 {print $1,$3}' a.txt 1,2,6...行
正则定位:
awk -F: '/^b/ {print $1,$3}' a.txt
列定位(其实还是定位符合条件的行,只不过筛选条件写在列里):
awk -F: '$3 ~/sb/ {print $0}' a.txt 分隔后,定位第三项中匹配正则/sb/的行,执行print$0命令
awk -F: '$3 !~/sb/ {print $0}' a.txt !表示取反
awk -F: '$1 == "sb" {print $0}' a.txt 分隔后,定位(第一项为sb)所在的行,执行{}内命令
-----------------------------------------------------------
awk -F: 'NR>=1 && NR<=3 && $1=="sb" {print $0}' a.txt 前3行中第1项为sb的行

变量:
NR 行数
NF 分隔后的项总数

awk -F: '{print $NF}' a.txt 分割后,输出最后一项内容
awk -F: '{print $(NF-1)}' a.txt 分割后,输出倒数第二项
awk -F: '{print NR, $(NF-1)}' a.txt 输出结果带行号

posted @ 2021-04-17 17:05  丑矬穷屌  阅读(66)  评论(0)    收藏  举报