您的位置:首页 > 其它

强大的awk

2016-06-05 22:17 232 查看

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内的字符串频度的统计,并且对出现的频度从高到低进行了排序。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: