我尝试使用gsub
withawk
应用于所有字符串,但失败了。
gsub(/^ *| *$/,"", $4);
我不想将其应用于 string $4
,而是想将其应用于所有字符串。我尝试过$0
但失败了。
怎么了?
awk '{
split($12, a, /[/:]/);
if (length(a[2]) == 1) $12=sprintf("%s:%02d/%d", a[1], a[2], a[3]);
gsub(/^ *| *$/,"", $0);
print $9, $12, $10, $2, $3, $4, $5, $6, $7, $8, $13
}' FS='|' OFS=',' file
例子
|f_name:x|l_name:x| address:x x | city:x |state:x|zip:x|country:x|ordernumber:x|code:x|downloaded:x| exp:9/2017|ip:x.x.x.x|
输出
ordernumber:x,exp:09/2017,code:x,f_name:x,l_name:x,address:x x,city:x,state:x,zip:x,country:x,ip:x.x.x.x
答案1
循环从1
到NF
并引用字段$i
(或任何您用来命名循环计数器的内容)。语法类似于C:
for (i = 1 ; i <= NF ; i++) {
...
}
例如
$ echo " foo bar :doh : bla:" |awk -vOFS=: -F: '
{ for (i = 1 ; i <= NF ; i++) gsub(/^ +| +$/, "", $i) } 1'
foo bar:doh:bla:
(我改为/^ */
as/^ +/
似乎mawk
忽略了^
前者中的。)
答案2
如果您想要做的只是从每个字段中删除空格(其中字段由字符“|”分隔),那么只需更改字段分隔符以包含该空格即可。假设您的 awk 支持正则表达式作为字段分隔符,请将您的FS='|'
设置替换为
FS=' *\\| *'
请注意,需要转义,|
因为字符串现在是一种模式。
这不处理第一个字段开头和最后一个字段结尾处的空格。您可以在这些上使用sub(/^ */,"",$1)
and sub(/ *$/,"",$NF)
。