我有一个TSV文件,其中包含来自世界不同地区的搜索词组。这些短语按区域分组,并按降序排列。
第三列是进行网络搜索的区域(例如US_VA ==美国弗吉尼亚州)
第二列代表实际的搜索词组。
第一列代表在该区域中搜索短语的次数。
10 shoes US_MA
9 boot US_MA
4 coat US_MA
12 hat US_TX
20 bathing suit US_CA
18 shorts US_CA
15 t shirt US_CA
10 sandals US_CA
在bash脚本中,我想缩小文件,使其仅包含每个区域的前两个最受欢迎的搜索
例如,输出应类似于:
10 shoes US_MA
9 boot US_MA
12 hat US_TX
20 bathing suit US_CA
18 shorts US_CA
我认为该解决方案涉及awk,但我不太清楚。
答案 0 :(得分:4)
答案非常小:
awk '++count[$NF] < 3' file.tsv
这取决于所描述的文件的排序。
要发送限制作为参数:
n=2
awk -v limit=$n '++count[$NF] <= limit' file.tsv
答案 1 :(得分:0)
另一个awk
awk ' {c=$NF; if(p!=c) { print ;t=1 } else { if(t<2) print ;t++ } p=c } ' file
具有给定的输入
$ cat alec.txt
10 shoes US_MA
9 boot US_MA
4 coat US_MA
12 hat US_TX
20 bathing suit US_CA
18 shorts US_CA
15 t shirt US_CA
10 sandals US_CA
$ awk ' {c=$NF; if(p!=c) { print ;t=1 } else { if(t<2) print ;t++ } p=c } ' alec.txt
10 shoes US_MA
9 boot US_MA
12 hat US_TX
20 bathing suit US_CA
18 shorts US_CA
$