我正在使用 UNIX 语言来提取我的文件。我用这个命令来提取它:
value_1=$(cat tmp.csv | head -1001 | cut -f 3-6 -d','> tmp1.csv)
value_2=$(cat tmp.csv | head -2002 | tail -1001 | cut -f 4-6 -d','> tmp2.csv)
paste -d ',' tmp1.csv tmp2.csv > final.csv
我的“tmp.csv”文件是:
0 0 0 17.92204 -3.017933 35.14229
1 0 1 18.27151 -3.179997 35.20044
2 0 2 18.22776 -3.566021 34.87167
.
.
0 1 0 20.89817 -2.37854 66.51003
1 1 1 21.48396 -2.461451 66.48988
2 1 2 21.78348 -2.575202 66.51389
但结果是这样的:
0 17.92204 -3.017933 35.14229
20.89817 -2.37854 66.51003
1 18.27151 -3.179997 35.20044
21.48396 -2.461451 66.48988
2 18.22776 -3.566021 34.87167
21.78348 -2.575202 66.51389
我想得到这样的结果:
0 17.92204 -3.017933 35.14229 20.89817 -2.37854 66.51003
1 18.27151 -3.179997 35.20044 21.48396 -2.461451 66.48988
2 18.22776 -3.566021 34.87167 21.78348 -2.575202 66.51389
我想知道是否可以在不手动处理的情况下实现这一目标?
答案1
如果我们可以基于第一行有 4 个项目、第二行有 3 个项目的事实,我们可以使用 awk 来执行此操作:
$ cat input-file | awk '{if(NF==4){aa=$0} else {print aa" "$0;}}' > output-file
答案2
您在问题中提到的先前输出我相信这是 Final.csv 的输出
0 17.92204 -3.017933 35.14229
20.89817 -2.37854 66.51003
1 18.27151 -3.179997 35.20044
21.48396 -2.461451 66.48988
2 18.22776 -3.566021 34.87167
21.78348 -2.575202 66.51389
使用这个命令
cat final.csv | sed "N;s/\n/ /g"
输出
0 17.92204 -3.017933 35.14229 20.89817 -2.37854 66.51003
1 18.27151 -3.179997 35.20044 21.48396 -2.461451 66.48988
2 18.22776 -3.566021 34.87167 21.78348 -2.575202 66.51389