Linux常用命令awk

awk能够处理类似csv这种按行格式的数据,对每一行record按照-F指定的分隔符切割,然后处理。默认支持空格和 分隔符

1、统计文件里某一列数据等于某个值的个数

cat djt10.log | awk -F ',' 'BEGIN{count=0;f=0} {if($1 == 1){count = count+1} else{f = f+1}} END{print count,f, count/f}' > 1-0_djt10.txt

2、拼接$1参数指定文件夹下的文件到一个大文件

for((i=13; i<189;i++)) do
    cd 10.52.116.$i
    pwd
    cat ./$1/find_prog.log >> ../djt$1.log
    cd ..
    #pwd
done

3、awk打印行号和整行信息

awk '{print NR, $0}'

4、awk匹配字符串

#如果第一列等于字符串4.0K,则打印这一行,~前后不要有空格,跟shell变量赋值一样
awk 'if($1~/4.0K/){print $0}' 

#判断字符串是否等于"null"
cat url.txt | awk '{if($1 != "null"){print $1}}' > urls.txt

#判断字符串是否等于"-1"
cat 2017-10-19-validated.txt |awk -F ',' '{if($14~/"-1"/){print $0}}'

5、循环——对输出结果排序,中间间隔了的则打印空行

cat 234420train.log|awk '{if($1==1){print $6}}'|sort -n|uniq| awk 'BEGIN{i=1}{if(i==$1){print i;i=i+1}else{while(i<$1){print ""; i=i+1} print $1;i=i+1}}'

6、awk把制表符换成逗号

cat tmp.txt | awk '{printf"[%s,%s]
", $1, $2}'

[hadoop@master scala]$ tail tmp.txt
101    118.5
102    126
103    127.5
104    120
105    119.5
106    134.5
107    130.5
108    139.5
109    133.5
110    138
[hadoop@master scala]$ cat tmp.txt | awk '{printf"[%s,%s] ", $1, $2}'|tail
[101,118.5]
[102,126]
[103,127.5]
[104,120]
[105,119.5]
[106,134.5]
[107,130.5]
[108,139.5]
[109,133.5]
[110,138]

7、awk里用system()执行命令

cat musics.txt | awk -F '*' '{cmd="wget "$2" -O "$1".mp3";system(cmd)}'

8、awk打印时以 分割

cat 10daysGap4.txt |awk '{print $6,$7}' OFS="	" > sampling-recall.xls

9、删除文件的第一列,后面全部按 打印

cat top571-5min-sorteddomain.ts |awk '{for(i=2; i < NF+1; i++){printf("%s	", $i)}printf("
")}'

10、

原文地址:https://www.cnblogs.com/vincent-vg/p/6537692.html