【发布时间】:2012-04-16 15:36:41
【问题描述】:
假设 $2 是我的变量。我试过从
awk -F\, '{print $2 ":"}'
到
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
但它从打印一些东西到什么都不打印。
【问题讨论】:
假设 $2 是我的变量。我试过从
awk -F\, '{print $2 ":"}'
到
awk -F\, '{print gsub(/[ \t]+$/, "", $2) ":"}'
但它从打印一些东西到什么都不打印。
【问题讨论】:
您正在打印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
}
【讨论】:
(我没有足够的积分直接评论上一个答案。)
要在$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 ":"}'
【讨论】:
awk -F\, '{gsub(/^[ \t]+|[ \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
【讨论】:
更简单的选择:
您必须定义修剪功能,使用 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
【讨论】: