如何只考慮一列中的文字來刪除重複的行?

如何只考慮一列中的文字來刪除重複的行?

我有以下文件:

ICR1 +
ICR1+1+3199 +
ICR1+2526+2828 +
IRT1 +
IRT1+1+1489 +
IRT1+713+937 +
LSR1 -
LSR1+1+1175 -
LSR1+366+638 -
NME1 +
NME1+1+340 +
NME1+2+118 +
PWR1 -
PWR1+1+941 -
PWR1+724+939 -
Q0017 -
Q0017+1+162 -
Q0020 -
Q0020+1370+1513 -
Q0020+1+440 -

第一列和第二列以製表符分隔。我確實需要具備以下條件:

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

我嘗試將 awk 與字段分隔符號“+”一起使用,但它也從第二列中刪除了 +...

答案1

您可以將 awk 的欄位分隔符號設為空格或+,然後執行經典的基於關聯數組的重複資料刪除:

$ awk -F'[ \t+]' '!seen[$1]++' file
ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

答案2

也許我誤解了這個問題,但這似乎有效:

grep -v '+.' file

輸出:

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

答案3

我透過使用sed命令實現了相同的目標

sed -n '/^.\{1,5\} .$/p' filename

輸出

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

答案4

使用磨坊主

mlr --tsv --implicit-csv-header --headerless-csv-output \
    put -S '$1=gsub($1,"[+].+$","")' then uniq -a inputfile

輸出是:

ICR1    +
IRT1    +
LSR1    -
NME1    +
PWR1    -
Q0017   -
Q0020   -

相關內容