假设$ 2是我的变量。我试过去
awk -F\, '{print $2 ":"}'
到
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
但它从印刷品到印刷品都没有。
答案 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
}
答案 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