linux awk命令各种使用实例
-
docker ps -a | grep redash |awk ‘{print $1}’|xargs docker rm -f
-
awk ‘$1>1’ 输出第一列大于1的
-
system使用外部命令 输出pid的启动命令
echo -e "pid\tcmd";ls /proc/[0-9]*/cmdline|awk -F / '{printf $3"\t"}''{system("cat "$0)}''{print ""}'
- 所有文件的author
ls |awk '{printf $0","}''{system("git log -1 --pretty=format:\"%an\" " $0 " | xargs")}'
echo "dataset,table,user" > a.csv; find -type f |awk -F "/" '{printf $3","$4","}''{system("git log -1 --pretty=format:\"%an\" " $0 " | xargs")}'>> a.csv
- 计算列数,不足列数时候退出
awk -F '\t' 'NF!=42 {print NR,NF,$0;exit}'
- 打印倒数第二列
echo a/b/c | awk -F '/' '{print $(NF-1)}'
- 每列加引号
awk -F'\t' '{ \
for (i=1;i<=NF;++i){ \
$i="\"" $i "\","
}
print $0
}' qw.txt
- 格式化输出tsv
cat yh_res | awk -F'\t' '{for(i=1;i<=NF;i++){sub(/\s+/,"",$i);$i=substr($i,1,20) "|||" }} 1' | column -t -s "|||"
- 去重
- 只输出重复的
- 统计次数
cat a.txt
59314
46791
59992
60311
60134
59992
60311
97343
# 去重 不在{}里 表示过滤条件 a表示一个字典
cat a.txt | awk '!a[$1]++ {print $0}' # {print $0}可省略
# 只输出重复的
cat a.txt | awk 'a[$1]++ {print $0}'
# 原样输出
cat a.txt | awk '++a[$1] {print $0}'
# 统计次数 END表示全部行数处理完之后再执行
cat a.txt | awk '{a[$1]++} END{for(i in a) print i,a[i]}'
- 计算csv第二列为空的数量
cat sample_old.csv | tqdm | awk -F, ' {if(length($2)==0) cnt+=1 } END {print cnt}'
- 取csv第三列最大最小值
head sample.csv | tqdm |sed 1d| awk -F, ' BEGIN{max=0;min=99999999} {if($3>max) max=$3}{if($3<min) min=$3 } END {print "max="max,"min="min}'
- 输入最后一列大于10的且只输出5行
cat a.txt | awk -F, '$NF>10 && cnt<5 { print $0;cnt+=1}'
# 满足时退出
cat a.txt | awk -F, '$NF>10 { print $0;cnt+=1} cnt>=5 {exit}'