使用awk从字段中删除空格

使用awk从字段中删除空格,awk,gsub,Awk,Gsub,在寻找答案的过程中,我遇到了这样一个问题: 但我没有成功地根据我的情况推断出这里的信息 我目前有一些数据的格式如下: 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" 我只想删除

在寻找答案的过程中,我遇到了这样一个问题:

但我没有成功地根据我的情况推断出这里的信息

我目前有一些数据的格式如下:

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"
我只想删除第一个字段中的空格,因此结果如下所示:

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;}'

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

如果只有单个空格,最简单的方法是使用
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"

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

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

谢谢这很有效。我不明白为什么这个sed命令没有贯穿整行并替换所有空格。对于第一个有几个空格的字段,这将失败。而且
sed
很难修复它。经过进一步检查,Birei是正确的。我还注意到它在第一行执行时的奇怪行为…@Birei good point,没有想到这一点,似乎不是这样,但无论如何都添加了一个解决方案@dsclough,即
sed
默认行为,用于删除所有事件。您可以使用
g
标志(全局)。@sudo\u O:Yes。我会给你一个+1的快速
awk
fix。我一见钟情。在这种情况下,这似乎更为自然和恰当。这正是我试图达到的目的。很高兴知道至少我很接近。
awk '{print $1$2,$3,$4}' file
HostName="Host Name Here"
ProductName="Product Name Here"
ProgramName="Program Name Here"