用序列号替换字段值

时间:2013-12-11 09:44:41

标签: shell unix

我有这样的场景

file1有

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

2 个答案:

答案 0 :(得分:0)

你可以使用这个awk one-liner:

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

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

OR纯BASH代码:

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

答案 1 :(得分: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