如何在awk中修改变量中的空白?

Hoa*_*Hoa 24 linux bash shell awk

假设$ 2是我的变量.我试过去

awk -F\, '{print $2 ":"}'
Run Code Online (Sandbox Code Playgroud)

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

但它从印刷品到印刷品都没有.

je4*_*e4d 44

您正在打印结果gsub,但gsub会进行就地修改$2而不是返回修改后的副本.打电话gsub,然后打印:

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


Jon*_*Lee 29

这些功能可以方便地提高可读性.他们还返回修剪结果:

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
} 
Run Code Online (Sandbox Code Playgroud)

资料来源:https://gist.github.com/andrewrcollins/1592991


JGC*_*JGC 16

(我没有足够的观点直接评论上一个答案.)

在使用结束时修剪空白$2:

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

要在使用开始时修剪空白$2:

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

对于结束和开始:

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

  • 看起来第三行可以简写为`awk -F\, '{gsub(/^[ \t]+|[ \t]+$)/, "", $2); 打印 $2 ":"}'`。请注意那个强大的管道标志!:) (3认同)

小智 5

Gawk 的单衬:

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