タブ区切りの.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になります。