Linux文件统计命令awk
2019-01-11 本文已影响5人
会飞的蜗牛07
awk通常用来处理遵循一定格式的文件,例如/etc/passwd
。
域的概念
域是awk命令操作的基本单元,例如字符串user:name
,$0
表示user:name
,$1
表示user
,$2
表示name
。当然,此时的分隔符需要指定为:
。
echo "user:name" | awk -F : '{print $1,$2}' #输出“user name”
BEGIN/END模式
awk在对文件操作前和后可以增加额外操作,例如
echo "user:name" | awk -F : 'BEGIN{print "begin"} {print $1,$2} END{print "end"}'
默认变量
$0 $1 $2
- 分别表示全域、域1和域2;
NF
- 当前行的域总数,需要注意分隔符;
NR
- 当前行号;
FILENAME
- 当前文件名;
FS/OFS
- 分别表示输入分隔符和输出分隔符,需要-v
选项;
常用选项
-F
- 指定分隔符;
-v
- 设置变量值,设置默认变量也需要使用这个选项;
条件判断
和C语言的条件判断格式类似。
# 统计/etc/passwd的行数
awk -F : 'BEGIN{line=0} {line++} END{print line}' /etc/passwd
或者
cat /etc/passwd | wc -l
# 打印第100行指定内容
awk -F : '{if(NR==100) print $1}' /etc/passwd
# 打印第10行内容
awk -F : 'BEGIN{line=0} {if(line==10){print $0;} line++}' /etc/passwd
# 打印前10行内容
awk -F : 'BEGIN{line=0} {while(line<10){print $0; line++}}' /etc/passwd
参考文献
Linux日常之命令awk - https://www.cnblogs.com/jiqianqian/p/7944013.html