如何添加另一列

如何添加另一列

我正在尝试将这样的文件转换为底部的内容。我不确定如何使用 awk 或 paste 来完成此操作。

0.0000000000  0.0000000000  0.0000000000 
0.7804643317  0.5703578412   0.0000000000 
-0.7804643317  0.5703578412   0.0000000000 

我将处理我试图转换的文件的行数变化。

0.0000000000 0  0.0000000000 0  0.0000000000 0
0.7804643317 0  0.5703578412 0  0.0000000000 0
-0.7804643317 0  0.5703578412 0  0.0000000000 0

答案1

我会用sed

sed -i -E 's/([^ ]+)/\1 0/g' file

或者如果文件是制表符分隔的:

sed -i -E 's/([^\t]+)/\1\t0/g' file
  • -i就地编辑文件。
  • s/pattern/replacement/表示用替换字符串替代模式。

或者awk

awk -i inplace '{for (f=1;f<=NF; f++){$f=$f" 0"}}1' file

或者

awk -i inplace '{for (f=1;f<=NF; f++){$f=$f"\t0"}}1' file

但是,大多数实现不支持-i inplace。然后,您需要将输出写入临时文件并用其覆盖原始文件:

awk '{for (f=1;f<=NF; f++){$f=$f" 0"}}1' file > file.tmp && mv file.tmp file

答案2

Perl 方法:

$ perl -ane 'print "$_ 0 " for @F; print "\n"' file
0.0000000000 0 0.0000000000 0 0.0000000000 0 
0.7804643317 0 0.5703578412 0 0.0000000000 0 
-0.7804643317 0 0.5703578412 0 0.0000000000 0 

或者,编辑原始文件:

perl -i -ane 'print "$_ 0 " for @F; print "\n"' file

答案3

添加了以下帮助: https://unix.stackexchange.com/questions/11801/replace-all-white-spaces-with-commas-in-a-text-file

$ cat text.file | sed 's/[[:blank:]]\+/\ 0\ /g'

 0.0000000000 0 0.0000000000 0 0.0000000000 0
 0.7804643317 0 0.5703578412 0 0.0000000000 0
 -0.7804643317 0 0.5703578412 0 0.0000000000 0

或者用列来美化:

$ cat text.file | sed 's/[[:blank:]]\+/\ 0\ /g' | column -t -e

 0.0000000000   0  0.0000000000  0  0.0000000000  0 
 0.7804643317   0  0.5703578412  0  0.0000000000  0
 -0.7804643317  0  0.5703578412  0  0.0000000000  0

请注意,这会考虑字符串末尾的空格。可能需要先使用 sed 进行过滤。

 $ cat text.file | sed 's/[[:blank:]]\+$//g' | sed 's/[[:blank:]]\+/\ 0\ /g' | column -t -e

 0.0000000000   0  0.0000000000  0  0.0000000000 
 0.7804643317   0  0.5703578412  0  0.0000000000
 -0.7804643317  0  0.5703578412  0  0.0000000000

相关内容