我正在尝试将这样的文件转换为底部的内容。我不确定如何使用 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