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

时间:2012-04-03 00:15:16

标签: linux bash shell awk

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

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

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

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

6 个答案:

答案 0 :(得分:44)

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

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

答案 1 :(得分: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
} 

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

答案 2 :(得分:16)

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

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

答案 3 :(得分:3)

gawk的一个班轮:

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

答案 4 :(得分:1)

Unix中的ltrim和rtrim

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

答案 5 :(得分:0)

更简单的选择:

你必须定义修剪功能,使用gsub进行一般替换。然后使用正则表达式查找如果以空格开始或结束(一次或多次),则返回该字段。

   awk -F'|' 'function trim(field){
   gsub(/^ +| +$/,"", field); 
   return field
   }{
   OFS=",";
   print trim($2),trim($3)}' stations > lista.csv

使用此代码是

文件 station 具有以下结构:

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