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,当然现在也添加了该解决方案。对于我的错误,我认为我接受了它,但因为我已经接受了它作为正确答案,所以它删除了它。非常感谢你的帮助!!