使用awk从字段中删除空格

时间:2013-07-16 16:07:45

标签: awk gsub

在搜索我的答案时,我遇到了这个:

removing a space from a string by awk

但是我根据我的情况推断这里的信息是不成功的。

我目前有一些格式如下:

Host Name="Host Name Here"
Product Name="Product Name Here"
Program Name="Program Name Here"

我只想删除第一个字段中的空格,因此结果如下所示:

HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"

使用此代码导致从所有字段中删除所有空格:

awk 'BEGIN {FS=" "; OFS=""} {for(i=1;i<=NF;++i) {out = out OFS $i}} END {print out;}'

根据我的理解,只是将空格作为字段分隔符并打印出来,空格替换为空字符串,这不是我想要的。

我相信我需要使用awk,我必须将Field Separator设置为=,然后应用这样的东西,也许??

awk '$1 ~ /[ \t]/ {gsub(/[ \t]/,"",$1)1}

根据我非常有限的理解,将查看字段1,如果它包含模式[\ t],将使用gsub用空字符串替换该空格。我不认为我的语法在这里完全正确。

3 个答案:

答案 0 :(得分:4)

使用=作为字段分隔符(对于输入和输出)并从第一个字段中删除空白:

awk -F= -v OFS="=" '{gsub(/[[:blank:]]/, "", $1); print}' << END
Host Name="Host Name Here"
Product Name="Product Name Here"
The Program Name="Program Name Here"
END
HostName="Host Name Here"
ProductName="Product Name Here"
TheProgramName="Program Name Here"

答案 1 :(得分:3)

如果您只有一个空格,最简单的方法是使用sed

$ sed 's/ //' file
HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"

使用GNU sed,您可以使用-i选项将更改存储回文件:

$ sed -i 's/ //' file

如果您可能在=之前用空格分隔两个以上的字,则可以使用awk执行以下操作:

$ awk '{sub(/ /,"",$1)}1' FS="=" OFS="=" file
HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"

答案 2 :(得分:0)

awk '{print $1$2,$3,$4}' file
HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"
相关问题