我有这种形式的一些数据:
0.123456 11.234567 -22.345678
-3.456789 4.567891 -5.678912 etc
我希望将它们转换为带有8列的矩阵,其格式为+ - 符号,前面有一个数字,小数点后有6个数字,例如:
+0.123456E+00 +1.123456E+01 -2.234567E+01 etc
我尝试过类似的东西,但它不起作用:
sed -n '31,46p' $filename1|xargs -n8|printf "%13.6e" >>file2.txt
有什么想法吗?
答案 0 :(得分:2)
我会用这个:
xargs -n 8 < file | awk '{for (i=1;i<NF;i++) printf ("%13.6e%s", $i, FS); printf ("%13.6e\n", $NF)}'
xargs -n X < file
来自您之前的问题:How to format the data of a file in Unix? awk '{for (i=1;i<NF;i++) printf ("%13.6e%s", $i, FS); printf ("%13.6e\n", $NF)}'
循环显示一行中的项目,并使用特定格式%13.6e
和空格打印它们。然后,它打印最后一个字段和一个新行。参见测试
$ cat a
0.123456 11.234567 -22.345678
-3.456789 4.567891 -5.678912
2.342 23.111 123.23 22
$ xargs -n 8 < a | awk '{for (i=1;i<NF;i++) printf ("%13.6e%s", $i, FS); printf ("%13.6e\n", $NF)}'
1.234560e-01 1.123457e+01 -2.234568e+01 -3.456789e+00 4.567891e+00 -5.678912e+00 2.342000e+00 2.311100e+01
1.232300e+02 2.200000e+01