i有一个TSV文件,其中包含来自世界不同区域的搜索短语。这些短语按区域分组,并按降频频率进行排序。
第三列是Web搜索的区域(例如US_VA == Virginia,美国)
第二列表示实际的搜索短语。
第一列表示该区域中搜索短语的次数。
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 '++count[$NF] < 3' file.tsv
这依赖于所描述的文件。
将限制作为参数发送:
n=2
awk -v limit=$n '++count[$NF] <= limit' file.tsv
另一个尴尬
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
$