如何从awk中的variables中裁减空白?

假设$ 2是我的variables。 我试过从

awk -F\, '{print $2 ":"}' 

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

但是从印刷到印刷什么都没有。

Solutions Collecting From Web of "如何从awk中的variables中裁减空白?"

您正在打印gsub的结果,但是gsub执行$2的就地修改,而不是返回修改的副本。 调用gsub ,然后打印:

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

这些功能派上用场,以提高可读性。 他们也返回修剪结果:

 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

(我没有足够的观点直接评论以前的答案。)

要在$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 ":"}' 

gawk单线程:

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

Unix中的ltrim和rtrim

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