仅当正则表达式匹配时,awk才会替换列,并将结果放入文件中

时间:2018-03-26 14:40:34

标签: regex awk replace

我正在学习awk,我想在几列中替换空格来替换它:

X X X X X X X X LA CROIX-HELLEAN X X

with:

X X X X X X X X LA_CROIX-HELLEAN X X

所以我试过了:

awk '{for(i=j=9; i < NF; i+=1) if ($9=="LA") {$j = $i"_"$(i+1); j++} NF=j-1}1' file.txt > newfile.txt

但结果只是保留修改后的线条,我也想要未经修改的线条......

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

以下将合并字段9和10 ...

$ldaprdn = "xxx\\{$username}";

如果你的某些行不需要合并,那么它们可能有错误的字段数:

$ldaprdn = "xxx\\$username";

或者,如果您的某些awk '{$9=$9"_"$10; for(i=10;i<NF;i++) $i=$(i+1); NF-- } 1' 字段包含多个空格,您可能需要更开放的缩减:

$ s=$'X X X X X X X X LA CROIX-HELLEAN X X\nX X X X X X X X TORONTO X X'
$ awk 'NF==12 {$9=$9"_"$10; for(i=10;i<NF;i++) $i=$(i+1); NF-- } 1' <<< "$s"
X X X X X X X X LA_CROIX-HELLEAN X X
X X X X X X X X TORONTO X X