nth出现在TSV中的值之后



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
$

最新更新