列の一部を選択して新しい列に貼り付ける

列の一部を選択して新しい列に貼り付ける

次の形式のファイルがあります。

# Comment 
# Comment 
# Comment
@ Title
@ Label 
@ Label
1       2
2       5
3       7
&
1       7
2       4
3       9
&

したがって、最初の列は繰り返され、2番目の列は変更されます。最初の列では「&」で区切られ、2 番目の列では空白で区切られます。そのようなセクションは何千ものあるかもしれません。 2番目の列の一部を切り取り、新しい列に貼り付けたいです。したがって、この場合は次のようになります。

# Comment 
# Comment 
# Comment
@ Title
@ Label 
@ Label
1     2     7
2     5     4
3     7     9

これにより、すべての列を簡単にチャートで作成できます。最初の行も気にしません。削除したりそのままにした方が簡単な場合は問題ありません。

ベストアンサー1

走る:

cat << EOF | awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "\t" $2 }
END { for (i in result) print result[i] }
'
# Comment 
# Comment 
# Comment
@ Title
@ Label 
@ Label
1       2
2       5
3       7
&
1       7
2       4
3       9
&
EOF

または、このファイルを使用してください。ファイル名入力データとして。この場合は、以下を実行します。

awk '
$1 == "#" || $1 == "@" { print; next }
$1 != "&" { result[$1] = (result[$1] ? result[$1] : $1) "\t" $2 }
END { for (i in result) print result[i] }
' filename

どちらの場合も、次のような結果が得られます。

# Comment 
# Comment 
# Comment
@ Title
@ Label 
@ Label
1   2   7
2   5   4
3   7   9

複数の列に対して機能します。

おすすめ記事