我有一个以下格式的文件:
# Comment
# Comment
# Comment
@ Title
@ Label
@ Label
1 2
2 5
3 7
&
1 7
2 4
3 9
&
因此第一列会重复,而第二列会发生变化。它们在第一列中用“&”分隔,在第二列中用空格分隔。可能有数千个这样的部分。我想剪切第二列的部分并将其粘贴为新列,因此在这种情况下:
# 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
它将适用于任意数量的列。