Sed/Awk 对文本的操纵

Sed/Awk manipulation of a text

我需要更改文件的最后一列:

dir_/agra_2008_04_07_a  6   scd679  Voice of male
dir_/agra_2008_04_07_a  7   scd680  voice off
dir_/agra_2007_10_01_a  2   scd502  voice over
dir_/agra_2007_10_08_a  2   scd502  voice over

致另一位:

dir_/agra_2008_04_07_a  6   scd679  Voice_of_male
dir_/agra_2008_04_07_a  7   scd680  voice_off
dir_/agra_2007_10_01_a  2   scd502  voice_over
dir_/agra_2007_10_08_a  2   scd502  voice_over

在最后一列添加下划线!任何人?谢谢!

一个简单的sed解决方案:

sed 's/ /_/8g' file

它用下划线替换空格,但忽略前 7 个出现,因此从第 8 个开始到最后 (g)。如果您的输出在最后一列之前始终具有相同数量的空格,则它会起作用。

只要你有双 space 作为字段分隔符你就可以使用这个 awk

awk -F"  " '{gsub(/ /,"_",$NF)}1' OFS="  " file
dir_/agra_2008_04_07_a  6   scd679  Voice_of_male
dir_/agra_2008_04_07_a  7   scd680  voice_off
dir_/agra_2007_10_01_a  2   scd502  voice_over
dir_/agra_2007_10_08_a  2   scd502  voice_over

它将上次提交的 space 替换为 _