2

在寻找我的答案时,我遇到了这个:

通过 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,并且我必须将字段分隔符设置为=,然后应用这样的东西,也许?

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

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

4

3 回答 3

7

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

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"
于 2013-07-16T16:21:03.337 回答
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"
于 2013-07-16T16:09:38.677 回答
0
awk '{print $1$2,$3,$4}' file
HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"
于 2018-12-14T22:07:24.070 回答