Bashの最初の列から重複行を削除する

Bashの最初の列から重複行を削除する

タブ区切りの.txtファイルがあり、最初の列から重複行を削除したいと思います。ソートせずにこれを行うことができれば本当に良いですが、ソートを使用する必要があるという事実を受け入れました。並べ替えでは、見出しを並べ替えることができないため、見出しは一番上にする必要があります。

テストデータセット(タブ区切り):

Symbol  ATCACGACAGACAGGT.1  ATCACGACAGCCTATA.1  TTTGTCATCATGTCTT.1  
STPG1   0   1   3
NFYA    0   0   1
STPG1   1   3   1
ABD 0   0   0
ABC 0   0   0

私の夢の結果:

Symbol  ATCACGACAGACAGGT.1  ATCACGACAGCCTATA.1  TTTGTCATCATGTCTT.1  
STPG1   0   1   3
NFYA    0   0   1
ABD 0   0   0
ABC 0   0   0

私の次善策:

Symbol  ATCACGACAGACAGGT.1  ATCACGACAGCCTATA.1  TTTGTCATCATGTCTT.1  
ABC 0   0   0 
ABD 0   0   0   
NFYA    0   0   1
STPG1   0   1   3

コンマで区切られたテストの例 testc.txt で次のコードを使用しましたが、ヘッダーはまだソートされています。有効なタブ区切り文字を割り当てる方法が見つからないようです。また、このコードのヘッダーに問題があります。

sort -u -t, -k1,1 testc.txt

実際のデータセットに行、列、または行名がいくつあるかわからないことを明確にする必要があるようです。

答え1

ここで使用できますawk

$ awk -F'\t' 'NR==1 || !seen[$1]++' ip.txt
Symbol  ATCACGACAGACAGGT.1      ATCACGACAGCCTATA.1      TTTGTCATCATGTCTT.1
STPG1   0       1       3
NFYA    0       0       1
ABD     0       0       0
ABC     0       0       0
  • -F'\t'タブ文字を区切り文字として指定
  • NR==1ヘッダーを保持します(与えられた入力には必須ではありません) - NRは現在行番号を持つ特殊変数です。
  • !seen[$1]++ここで、seen配列は最初のフィールドをキーとして使用し、値が0の場合(キーが最初に表示されるとき)条件がtrueになります。

関連情報