如何在单个列中使用“sed”

时间:2018-03-16 08:34:44

标签: bash awk sed multiple-columns

我想用一列中的另一个字符串替换字符串。

输入:

A.a     1
A.b     .
A.c     1
A.d     1

期望的输出:

A.a     1
A.b     -9
A.c     1
A.d     1

使用sed 's/\./-9/g' input > output它会.修改所有-9,这就是我获得的内容:

A-9a     1
A-9b     -9
A-9c     1
A-9d     1

如何仅在单个列($ 2)上使用sed

2 个答案:

答案 0 :(得分:3)

关注awk可能对您有帮助。

awk 'FNR==2{$2="-9"} 1' OFS="\t"   Input_file

以上只会将$2值更改为-9,以防您需要交叉验证第二行的第二个字段是否为.并且您想要进行更改然后只有以下内容才有帮助你也一样。

awk 'FNR==2 && $2=="."{$2="-9"} 1' OFS="\t"   Input_file

OR

awk '$2=="."{$2="-9"} 1' OFS="\t"   Input_file

追加> temp_file && mv temp_file Input_file以获取Input_file本身的输出。

答案 1 :(得分:0)

您可以使用群组模式。在sed中有点沉重但在这种情况下它仍然很容易。

public static Number<uint> ToUnsigned(this Number<int> val)
      => new Number<uint>((uint)val.Value); // etc

此处不需要最后一个sed 's/^\([^[:space:]]+[[:space:]]+\)\./\1-9/' input > output # a more generic for the 4th column (\{3\} here mean 3 group before) sed 's/^\(\([^[:space:]]+[[:space:]]+\)\{3\}\)\./\1-9/' input > output ,因为它仅适用于行上的1个元素