新しい行の2番目の列の各「単語」を印刷し、各新しい行の最初の列のテキストをコピーする必要があります。列はタブで区切られ、2番目の列のすべての「単語」は「GO:」で始まり、スペースで区切られます。また、各行には1から数十までのさまざまな「単語」数があります。
例えば
TRINITY_DN23871_c0_g1_i1 GO:0003735 GO:0005783 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707 GO:0005524
希望の出力
TRINITY_DN23871_c0_g1_i1 GO:0003735
TRINITY_DN23871_c0_g1_i1 GO:0005783
TRINITY_DN23871_c0_g1_i1 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707
TRINITY_DN6318_c1_g1_i1 GO:0005524
私はawkを使ってみました。
awk -v RS=" " '{print}' unique.ID_all.unique.GOs2
しかし、私が得るものは
TRINITY_DN23871_c0_g1_i1
GO:0003735
GO:0005783
GO:0005829
TRINITY_DN6318_c1_g1_i1
GO:0004707
GO:0005524
アイデアが足りません。誰でも助けることができますか?
答え1
2からフィールド数(NF
)まで繰り返し、最初のフィールドと異なるフィールドをタブで区切って印刷できます。
awk '{ for (i=2;i<=NF;i++) print $1"\t"$i }' unique.ID_all.unique.GOs2
答え2
ミラーの使用(https://github.com/johnkerl/miller)、次からスタート
TRINITY_DN23871_c0_g1_i1 GO:0003735 GO:0005783 GO:0005829
TRINITY_DN6318_c1_g1_i1 GO:0004707 GO:0005524
そして走っている
mlr --nidx --fs tab then reshape -r "^[^1]" -o item,value then cut -x -f item input.tsv >output.tsv
あなたはやる
TRINITY_DN23871_c0_g1_i1 GO:0003735
TRINITY_DN23871_c0_g1_i1 GO:0005783
TRINITY_DN23871_c0_g1_i1 GO:0005829
TRINITY_DN23871_c0_g1_i1
TRINITY_DN6318_c1_g1_i1 GO:0004707
TRINITY_DN6318_c1_g1_i1 GO:0005524
このコマンドに関するいくつかの注意事項:
--nidx --fs tab
、入力および出力フォーマットの設定reshape -r "^[^1]" -o item,value
、入力ファイルをワイド形式から長い形式に変換します。cut -x -f item
出力列の選択