2013-12-11 18 views
0

字段值我有这样替换序列号

文件1方案具有

cat file1 
aa~bb~1~dd 
xx~yy~2~kk 
cc~ff~3~pp 
....... 

我想更新这样

cat file2 
aa~bb~20~dd 
xx~yy~21~kk 
cc~ff~22~pp 
....... 

与下面的代码,但不工作尝试过的文件

seq_nr=20 
i=1 
while [i -le 10 ] 
do 
seq_nr=`expr 20 + 1` 
awk 'BEGIN {FS=OFS="~"} NR==i {$3=$seq_nr} {print} file1 > file2 
i= `expr i +1` 
done 

回答

0

尝试这一个班轮:

awk -F~ -v OFS='~' '$3=19+NR' file 

你的榜样:

kent$ echo "aa~bb~1~dd 
xx~yy~2~kk 
cc~ff~3~pp"| awk -F~ -v OFS='~' '$3=19+NR' 
aa~bb~20~dd 
xx~yy~21~kk 
cc~ff~22~pp 
+0

按预期工作谢谢 – Pranee

0

你可以使用这个AWK一行代码:

awk 'BEGIN{FS=OFS="~"} {$3+=19}1' file1 > file2 

cat file2 
aa:bb:20:dd 
xx:yy:21:kk 
cc:ff:22:pp 

或纯BASH代码:

IFS='~' && while read v1 v2 v3 v4; do 
    echo "$v1:$v2:$((v3+19)):$v4" 
done < file 
+0

seq_nr不是常量,该文件有大约31个字段 – Pranee

+0

输入文件可以有任何带有awk命令的文件#我建议。 – anubhava

+0

如果假设我有3条记录它是未来作为 AA〜BB〜21〜DD XX〜YY〜2〜KK 立方厘米〜FF〜3〜PP AA〜BB〜1〜DD XX〜YY〜22 〜kk cc〜ff〜3〜pp – Pranee