列のテキストのみを考慮して重複行を削除するにはどうすればよいでしょうか?

列のテキストのみを考慮して重複行を削除するにはどうすればよいでしょうか?

次のファイルがあります:

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 -

最初の列と 2 番目の列はタブで区切られています。次のものが必要です。

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

フィールド区切り文字「+」を使用して awk を使用しようとしましたが、2 番目の列からも + が消去されてしまいました...

答え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   -

関連情報