keep only 1st instance of string in text file block

时间:2016-05-13 15:32:22

标签: bash awk sed

I have files with segments like this:

R_byK3rjAyABPDuil
2007 UT H.B. 437
R_27mvt5Z0CytgL2Q  
2007 UT H.B. 437
2007 UT H.B. 437
2007 UT H.B. 437
R_xGf2zqaMuPgAGn7

I don't want to sort or unique the entire file, only to make each n-tuple unique, like so:

R_byK3rjAyABPDuil
2007 UT H.B. 437 
R_27mvt5Z0CytgL2Q 
2007 UT H.B. 437
R_xGf2zqaMuPgAGn7

Any help would be great. I'm hoping there is a somewhat simple sed/awk hack for this. Thanks.

2 个答案:

答案 0 :(得分:2)

$ uniq file

R_byK3rjAyABPDuil
2007 UT H.B. 437
R_27mvt5Z0CytgL2Q
2007 UT H.B. 437
R_xGf2zqaMuPgAGn7

我确信这已经被多次询问/回答了。如果您只想获取整个文件中的唯一行而不进行排序

$ awk '!a[$0]++' file

R_byK3rjAyABPDuil
2007 UT H.B. 437
R_27mvt5Z0CytgL2Q
R_xGf2zqaMuPgAGn7

答案 1 :(得分:2)

使用GNU grep:

grep -Poz 'R.*(\n[^R].*)?' file

输出:

R_byK3rjAyABPDuil
2007 UT H.B. 437
R_27mvt5Z0CytgL2Q 
2007 UT H.B. 437
R_xGf2zqaMuPgAGn7

来自man grep

  

-P:将PATTERN解释为Perl正则表达式。

     

-o:仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。

     

-z:将输入视为一组行,每行以零字节(ASCII NUL字符)而不是换行符结束