Bash 如何使用;sed";一栏

Bash 如何使用;sed";一栏,bash,awk,sed,multiple-columns,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 遵循awk可能会对您有所帮助 awk 'FNR==2

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

输入:

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

遵循
awk
可能会对您有所帮助

awk 'FNR==2{$2="-9"} 1' OFS="\t"   Input_file
awk 'FNR==2 && $2=="."{$2="-9"} 1' OFS="\t"   Input_file
如果您需要交叉验证第2行的第2个字段是否为
,并且您希望进行更改,则只需将
$2
值更改为
-9
,然后以下内容可能会对您有所帮助

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


附加
>临时文件和&mv临时文件输入文件
以在输入文件本身中获得输出。

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

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

这里不需要最后一个
g
,因为它只适用于一行中的一个元素

如果它确实必须在sed中,您可以使用第二行的事实说
sed'2s/\.$/-9/'文件
。您可以尝试sed's/\./-9/2'谢谢!这个很好用。如果我想将它应用于整个列(不仅仅是第2行),我可以使用:
awk'FNR==NR{$2=“-9”}1'OFS=“\t”Input\u file
,然后使用
gsub(/\./,“-9”)
而不是代码中的
$2=“-9”
,让我知道它是怎么回事。啊,好的,很抱歉。问题是我想修改整个第二栏,而不是第二行。@EdMorton,当然现在也添加了该解决方案。对于我的错误,我认为我接受了它,但因为我已经接受了它作为正确答案,所以它删除了它。非常感谢你的帮助!!