2012-04-03 53 views

回答

35

您正在打印gsub的結果,但gsub執行了$2的就地修改,而不是返回修改後的副本。呼叫gsub,然後打印:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
14

(我沒有足夠的積分,在以前的答案直接評論。)

要在$2使用修剪空白:

awk -F\, '{gsub(/[ \t]+$/, "", $2); print $2 ":"}' 

修剪空白開始$2使用:

awk -F\, '{gsub(/^[ \t]+/, "", $2); print $2 ":"}' 

而對於兩端和開頭:

awk -F\, '{gsub(/^[ \t]+/, "", $2); gsub(/[ \t]+$/, "", $2); print $2 ":"}' 
+1

RTRIM看起來第三行可以縮寫爲'awk -F \',{gsub(/^[\ t] + | [\ t] + $)/,「」,$ 2);打印$ 2「:」}''。介意強大的管道標誌! :) – syntaxerror 2015-07-24 06:35:26

28

這些功能派上用場,以提高可讀性。他們還返回修剪結果:

function ltrim(s) { sub(/^[ \t\r\n]+/, "", s); return s } 
function rtrim(s) { sub(/[ \t\r\n]+$/, "", s); return s } 
function trim(s) { return rtrim(ltrim(s)); } 
BEGIN { 
# whatever 
} 
{ 
# whatever 
} 
END { 
# whatever 
} 

來源:https://gist.github.com/andrewrcollins/1592991

+0

謝謝!正如你所說,我的代碼變得易讀。 – haper 2016-12-08 09:01:59

3

一個一個襯裏GAWK:

gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}' 
1

LTRIM和Unix的

awk 'BEGIN{FS=OFS="|"} {gsub(/^[ \t]+|[ \t]+$/, "", $2)}1' filename.txt