将列添加到制表符分隔文件(sed/awk/where)的中间

将列添加到制表符分隔文件(sed/awk/where)的中间,sed,awk,Sed,Awk,我正在尝试将一列(内容为“0”)添加到预先存在的以制表符分隔的文本文件的中间。我想sed或awk会做我想做的事。我在网上看到过各种解决方案,它们都能做到这一点,但它们的解释不够简单,我无法修改 我目前有以下内容: Affx-11749850 1 555296 CC 我需要这个内容 Affx-11749850 1 0 555296 CC 使用命令awk'{$3=0}1'filename会弄乱我的格式,并用0替换第3列,而不是用0添加第三列 任何帮助(解释!)使我

我正在尝试将一列(内容为“0”)添加到预先存在的以制表符分隔的文本文件的中间。我想
sed
awk
会做我想做的事。我在网上看到过各种解决方案,它们都能做到这一点,但它们的解释不够简单,我无法修改

我目前有以下内容:

Affx-11749850   1       555296  CC
我需要这个内容

Affx-11749850   1   0   555296  CC
使用命令
awk'{$3=0}1'
filename会弄乱我的格式,并用0替换第3列,而不是用0添加第三列

任何帮助(解释!)使我能够解决这个问题,以及未来类似的问题,非常感谢

awk '{$2=$2" "0; print }' your_file
测试如下:

> echo "Affx-11749850 1 555296 CC"|awk '{$2=$2" "0;print}'
Affx-11749850 1 0 555296 CC

使用隐式
{print}
规则并将
0
附加到第二列:

awk '$2 = $2 FS "0"' file
或使用
sed
,假设使用单个空格分隔符:

sed 's/ / 0 /2' file
perl

perl -lane '$, = " "; $F[1] .= " 0"; print @F'

AWK的一个非常类似的选项是将分隔符留给AWK,它是
AWK'{$5=$4;$4=$3;$3=0}1'
我宁愿这样做,因为我
AWK
不保留实际的
FS
,而是使用空格(默认值)。因此,为了使文件选项卡保持分隔,我必须执行
awk'$2=$2“\t0”'文件
如果文件是选项卡分隔的,请告诉
awk
:awk-F'\t'$2=$2 FS“0”'文件工作正常。谢谢,我选择了awk'$2=$2 FS“0”'sed解决方案很好,可以简化(这也保持了给定示例中的间距):
sed's//0/21'
将用
0
替换第21个字符。一个相关的问题-该文件有280列,我想切换第1列和第2列,剪切我不确定如何在不键入大量打印语句的情况下实现这一点$277、$278、$279。。。