使用bash或类似工具将列插入到文件中



假设我有一个类似的文件

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

其中CCD_ 1是已知的线数。但这恰好非常缓慢。

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

使用awk可以执行:

awk '{$3 = "0 0 " $3} 1' file
1 3 0 0 44 5
2 23 0 0 1 44

或者这个sed也可以工作:

sed -i.bak -E 's/^(([^ ]+ +){2})/10 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:]]*)(.*)$/1 0 02/' file

ruby:

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

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

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

解释:只需在第二个字段中添加空格和2个零(用空格分隔(,然后再加空格,即可打印当前行。

这可能对你有用(GNU sed(:

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

自行替换第2列,并附加0 0

最新更新