1. 实现对文件的转置,具体看Leetcode的194题
#!/bin/bash
awk '{
for(i=1;i<=NF;i++){
A[FNR, i]=$i
}
}
END{
for(i=1;i<=NF;i++){
for(j=1;j<=FNR;j++){
printf A[j,i]" "
}
print ""
}
}' file.txt
2. 合并两个文件
假如我有两个文件a.txt和b.txt。其中a.txt的内容为:
1 x xx
2 y yy
3 z zz
b.txt的内容为:
1 a
3 b
我想要实现的结果是如下:
1 x xx a
2 y yy
3 z zz b
即以a.txt中的第一列元素为基准,如果b.txt也存在a.txt中的第一列元素,则将b.txt中该行剩余的元素跟到a.txt中的行后,即增加一列。如果没有的话,直接将a.txt中的行打出。
$ awk 'BEGIN{FS=OFS=" "} NR==FNR{A[$1]=$2} NR>FNR{print $0, A[$1]}' b.txt a.txt
1 x xx a
2 y yy
3 z zz b
另一种方式为使用awk的ARGIND参数来搞定:
$ awk 'ARGIND==1{A[$1]=$2} ARGIND>1{print $0, A[$1]}' b.txt a.txt
1 x xx a
2 y yy
3 z zz b
3. 实现一个简单的字符统计功能
awk '{for(i=1;i<NF;i++)A[$i]++} END{for(i in A) print i, A[i]}' a.txt | sort -rnk2
以上一行脚本实现了对文本a.txt内的字符串频度的统计,并且对出现的频度从高到低进行了排序。