特定の列の固有値を出力し、残りの列を次の行に出力する方法

特定の列の固有値を出力し、残りの列を次の行に出力する方法

TSVファイルの処理にawkを使用したいです。これが私の入力です。

scaffold1   1   100 
scaffold1   101 200
scaffold1   201 300
scaffold2   1   100
scaffold2   201 500
scaffold3   10  500
scaffold4   10  300

予想出力:

Feature scaffold1
1   100
101 200
201 300
Feature scaffold2
1   100
01  500
Feature scaffold3
10  500
Feature scaffold4
10  300

uniqコマンドを使用して最初の列を印刷するには、uniqとsortとawkを試しましたが、最初の列の一意の値をすべて印刷し awk '!seen[$1]++ Input.txt てから残りの列を印刷できますが、最初の一意の値を印刷したいと思います。 next と残りの列行は上の図のようになります。

これを行う方法があるかどうかを教えてください。

答え1

使用awk:

awk '!seen[$1]++ {print "Feature",$1} {print $2,$3}' file
Feature scaffold1
1 100
101 200
201 300
Feature scaffold2
1 100
201 500
Feature scaffold3
10 500
Feature scaffold4
10 300

答え2

sedとawkの組み合わせを使ってこれをテストしましたが、うまくいきます。

パスワード:


for o in `awk '{print $1}' example.txt| sort | uniq `; do sed -n "/$o/p" example.txt | sed "s/$o//g" |sed "1i Feature $o"; done  

出力


Feature  scaffold1
 1   100
  101 200
  201 300
Feature  scaffold2
  1   100
  201 500
Feature  scaffold3
  10  500
Feature  scaffold4
  10  300

関連情報