2013-07-16 51 views
2

刪除空格在尋找我的答案我碰到這個傳來:使用awk來從外地

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,我必須將字段分隔符設置爲=,然後應用這樣的事情,也許?

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

其中,以我的瞭解非常有限,會看場1,如果包含了模式[\ t],將使用GSUB用一個空字符串替換空間。不過,我認爲這裏的語法完全沒有錯。

回答

4

使用=作爲字段分隔符(用於輸入和輸出兩者),並從所述第一字段中刪除空白:

​​
HostName="Host Name Here" 
ProductName="Product Name Here" 
TheProgramName="Program Name Here" 
+0

這正是我試圖去的地方。很高興知道我是非常接近的,至少。 – dsclough

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" 
+0

感謝。這工作。我不明白爲什麼這個sed命令不是通過整個線路,而是更換所有的空間。 – dsclough

+1

這將失敗的第一個領域有幾個空格。對於'sed'來修復它將會是difficutl。 – Birei

+0

經進一步檢查,Birei是對的。我也注意到它在第一行執行的奇怪行爲... – dsclough