我的问题是无法输出经过处理的文件,并将FS设置为正则表达式。 我有一个我必须处理的文件:
id 1:1 2:1 3:2 5:1
id 1:2 3:1 4:1
我希望将值乘以(''之后)2:
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2
我试过了:
awk 'BEGIN {FS=" [[:digit:]]+:"}{OFS=FS}{for (i=2; i<=NR;i++) $i=$i*2; print}' file
然而,它给了我文字[[:digit:]]+:
作为FS。我在这里重做了一个类似的问题并尝试将字段设置为记录,最后打印$0, RT
,但它也没有用。
感谢您的任何提示。
答案 0 :(得分:4)
您可以使用split
功能
$ awk '{for(i=2; i<=NF; i++){split($i,a,":"); a[2]*=2; $i=a[1]":"a[2]}} 1' file
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2
或者更简单的perl
解决方案,其中:
之后的所有数字都乘以2
$ perl -pe 's/:\K\d+/$&*2/ge' file
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2
答案 1 :(得分:2)
使用gawk,你可以在split函数的gawk-only额外参数中捕获字段分隔符(类似于RT
):
BEGIN {FS=" [[:digit:]]+:"}
{
split($0,a,FS,seps);
printf "%s", a[1];
for (i=2; i<=length(a); ++i)
{printf "%s%s", seps[i-1], a[i]*2}
print ""
}
$ awk -f mirr.awk mirr.txt
id 1:2 2:2 3:4 5:2
id 1:4 3:2 4:2