我想用一列中的另一个字符串替换字符串。
输入:
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
?
答案 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个元素