给出AWK的以下输入:
10;20;20
8;41;41
15;52;52
我如何增加/减少值,以便:
所以期望的输出是:
10;20;20
8;31;31
15;40;40
我需要自动递增并循环遍历线条, 使用关联数组,但它让我感到困惑。 当然,这并没有按照要求运作:
#!/bin/awk -f
BEGIN { FS = ";" }
{
print ln, st, of
ln=$1
st=$2 + ln + 1
of=$3 + ln + 1
}
答案 0 :(得分:1)
关注awk
可能对您有帮助。
awk -F";" '
FNR==1{
val=$1;
val1=$2;
val2=$3;
print;
next
}
{
$2=val+val1+1;
$3=val+val2+1;
print;
val=$1;
val1=$2;
val2=$3;
}' OFS=";" Input_file
对于您给定的Input_file,输出如下。
10;20;20
8;31;31
15;40;40
答案 1 :(得分:1)
awk 'BEGIN{
FS = OFS = ";"
}
FNR>1{
$2 = p2 + p1 + 1
$3 = p3 + p1 + 1
}
{
p1=$1; p2=$2; p3=$3
}1
' infile
输入:
$ cat infile
10;20;20
8;41;41
15;52;52
输出:
awk 'BEGIN{FS=OFS=";"}FNR>1{$2=p2+p1+1; $3=p3+p1+1 }{p1=$1; p2=$2; p3=$3}1' infile
10;20;20
8;31;31
15;40;40
或仅存储您感兴趣的字段
awk -v myfields="2,3" '
BEGIN{
FS=OFS=";";
split(myfields,t,/,/)
}
{
for(i in t)
{
if(FNR>1)
{
$(t[i]) = a[t[i]] + a[1] + 1
}
a[t[i]] = $(t[i])
}
a[1] = $1
}1' infile
答案 2 :(得分:0)
使用awk
awk -F";" -v OFS=";"
'NR!=1{ $2=a[2]+a[1]+1; $3=a[3]+a[1]+1 } { split($0,a,FS) } 1' file
将行拆分为数组,在处理下一行时,我们可以使用存储的值。
测试
10;20;20
8;31;31
15;40;40