簡體   English   中英

如何根據列字符串的出現僅輸出前n行

[英]How to output only the first n lines based on occurrences of a column string

我有一個大文件,在第一列中包含ID號,然后在隨后的列中包含其他唯一信息。 每個ID號在文件中出現多次:

000112 3489 A-8 40984
000112 4743 A-7 94587
000112 5894 A-1 45795
000177 8347 A-2 54575
000177 5843 B-5 94342
000177 5684 A-4 76544
000177 6586 C-2 65834
000226 5679 C-2 85795
000226 5456 C-1 45876
000226 9899 A-2 56834

我想輸出一個僅包含每個ID號的前兩次出現的行的文件:

000112 3489 A-8 40984
000112 4743 A-7 94587
000177 8347 A-2 54575
000177 5843 B-5 94342
000226 5679 C-2 85795
000226 5456 C-1 45876

請注意,此數據僅代表輸入文件的一小部分,因此,我需要的不是需要輸入特定字符串(ID號)的命令。 謝謝!

awk 'a[$1]++ < 2' input-file

應該可以。 只需讀取文件,然后增加由第一列中的值索引的數組即可。 如果該值小於2,則打印該行。 當您第三次看到相同的id時,數組中的索引將為2,並且該行的輸出將被抑制。

這不是很漂亮,但是會產生所需的輸出:

第1步:

awk '!seen[$1]++' input.file > output1 

第2步:

grep -v -F -f output1 input.file | awk '!seen[$1]++' > output2

第三步:

cat output1 output2 | sort -k 1 > desired.output

暫無
暫無

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

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