使用 bash 或类似方式将列插入到文件中

insert columns to file with bash or alike

假设我有一个像

这样的文件
1 3 44 5
2 23 1 44

我想在前两个之后添加两列 0,以获得

1 3 0 0 44 5
2 23 0 0 1 44

我可以使用类似

的东西
cat file|(
for ((i=0;i<nlines;i++))
do
   read l
   echo $(echo $l|cut -d" " -f -2) 0 0 $(echo $l|cut -d " " -f 3-)
done
) >output

其中 nlines 是已知的行数。但这恰好是极其缓慢的。

快速方式完成工作的方法是什么? Bash、awk 或其他 linux 命令行工具都可以。

使用awk你可以做到:

awk '{ = "0 0 " } 1' file

1 3 0 0 44 5
2 23 0 0 1 44

或者这个 sed 也可以:

sed -i.bak -E 's/^(([^ ]+ +){2})/ 0 /' file

cat file

1 3 0 0 44 5
2 23 0 0 1 44

Perl 非常适合快速文本操作。在这里,你可以

perl -i.bak -lane 'splice @F, 2, 0, (0, 0); print join " ", @F' file

您可以使用 sed 来:

sed -E 's/^([^[:space:]]*[[:space:]]*[^[:space:]]*)(.*)$/ 0 0/' file

ruby:

ruby -lane 'puts ($F[0..1]+["0"]*2+$F[2..]).join(" ")' file

使用您显示的示例,请尝试以下 awk 代码。

awk '{= " 0 0 "} 1' Input_file

解释: 只需添加 space 和 2 个零(由 space 分隔)后跟 space进入第二个字段本身并打印当前行。

这可能适合您 (GNU sed):

sed -i 's/\S\+/& 0 0/2' file

单独替换第 2 列并追加 0 0.