我该如何在awk中去掉变量中的空格?

41
假设$2是我的变量。我已经尝试从
awk -F\, '{print $2 ":"}'

为了

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

但它从打印某些东西到完全不打印任何东西。
6个回答

60

你正在打印 gsub 的结果,但是 gsub 是对 $2 进行原地修改而不是返回修改后的副本。调用 gsub,然后再打印:

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

56
这些函数非常有用,可提高可读性。它们还返回修剪后的结果:
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


23

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

4
第三行可以简写为awk -F\, '{gsub(/^[ \t]+|[ \t]+$)/, "", $2); print $2 ":"}'。请注意强大的管道符号! :) - syntaxerror

8
一行gawk代码:
gawk -F\, '{$2 = gensub(/^[ \t]*|[ \t]*$/,"","g",$2)}'

3

Unix中的ltrim和rtrim

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

这是一个使用awk命令去除Unix文件中左右两侧空格的示例。其中,FS和OFS变量被设置为竖线符号“|”,gsub函数用于替换匹配正则表达式的字符串为空字符串,$2表示第二列数据。最后的1表示打印输出结果。

0
一个更简单的选项:
你需要定义 trim 函数,使用 gsub 进行通用替换。然后使用正则表达式查找是否以空格(一次或多次)开头或结尾,返回该字段。
   awk -F'|' 'function trim(field){
   gsub(/^ +| +$/,"", field); 
   return field
   }{
   OFS=",";
   print trim($2),trim($3)}' stations > lista.csv

用这段代码就足够了

stations文件的结构如下:

     1 | UTAR | U de Tarapacá                   
     3 | VALN | Valparaíso                      
     4 | JRGN | Junta Gorgino                   
     6 | TRPD | Torpederas  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接