簡體   English   中英

awk根據特定的列數據創建包含重復項數的列

[英]awk creating column holding number of duplicates based on specific columns data

在以下data.txt文件中,第二和第三列中的值在幾行中重復(盡管行不相同):

cat data.txt > 
Julie   Andrews jand    109
Julie   Andrews jand    119
John    Thomas  jd      301
Alex    Tremble atrem   415
Alex    Tremble atrem   3415
Alan    Tremble atrem   215
John    Tomas   jd      302
John    Tomas   jd      3302
John    Tomas   jd      3402
John    Tomas   jd      33302
Alex    Trebe   atrem   416

如何在第2列和第3列的基礎上每行增加第5列以指定最大重復次數? 例如所需的輸出如下所示:

cat desired.output.txt > 
Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1

當前,我有以下命令,該命令為每個副本創建一個簡單的計數器(但是,這不是所需的輸出):

awk -F "\t" '{OFS="\t"}{print $0,++cnt[$2,$3]}' data.txt
Julie   Andrews jand    109     1
Julie   Andrews jand    119     2
John    Thomas  jd  301 1
Alex    Tremble atrem   415 1
Alex    Tremble atrem   3415    2
Alan    Tremble atrem   215 3
John    Tomas   jd  302 1
John    Tomas   jd  3302    2
John    Tomas   jd  3402    3
John    Tomas   jd  33302   4
Alex    Trebe   atrem   416 1

對於未排序的文件,最簡單的方法是對輸入文件進行兩次掃描

$ awk -v OFS='\t' 'NR==FNR {count[$2,$3]++; next} 
                           {print $0, count[$2,$3]}' file{,}

Julie   Andrews jand    109     2
Julie   Andrews jand    119     2
John    Thomas  jd      301     1
Alex    Tremble atrem   415     3
Alex    Tremble atrem   3415    3
Alan    Tremble atrem   215     3
John    Tomas   jd      302     4
John    Tomas   jd      3302    4
John    Tomas   jd      3402    4
John    Tomas   jd      33302   4
Alex    Trebe   atrem   416     1

如果文件已排序或太大,則可以收集所有條目並在上下文更改時打印計數。

ps。 請注意, file{,}file file處理兩次相同文件的bash簡寫形式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM