
次の形式のファイルがあります。
# 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
複数の列に対して機能します。