我想通过将第3列以外的所有列都放在新行中,并在这些字符串之前加上上一行中的#1和#2值,将文件中的列数减少到3。这有点抽象,所以这里是一个示例:
Column1 Column2 Column3
A1 B1 C1
A2 B2 C2 D2
A3 B3 C3 D3 E3
A4 B4 C4
变成
Column1 Column2 Column3
A1 B1 C1
A2 B2 C2
A2 B2 D2
A3 B3 C3
A3 B3 D3
A3 B3 E3
A4 B4 C4
每个Cn
,Dn
和En
值都需要An
和Bn
的信息。
我在这里找到了问题的第一部分的解决方案: https://www.unix.com/shell-programming-and-scripting/125202-awk-new-line-between-columns.html
awk '{print $1,$2,$3"\n"$4"\n"$5}' oldfile > newfile
这产生
Column1 Column2 Column3
A1 B1 C1
A2 B2 C2
D2
A3 B3 C3
D3
E3
A4 B4 C4
因此,已移动的字符串缺少An
和Bn
。不幸的是,还会生成一堆空的新行,它们可以省去一些额外的步骤,也可以在相同的过程中删除,我不在乎。