我在一个名为data.txt的文本文件中有以下内容
&st=1000&type=rec&uniId=5800000000&acceptCode=1000&drainNel=supp&
&st=1100&type=rec&uniId=5800000000&acceptCode=1000&drainNel=supp&
&st=4100&type=rec&uniId=6500000000&acceptCode=4100&drainNel=ured&
&st=4200&type=rec&uniId=6500000000&acceptCode=4100&drainNel=iris&
&st=4300&type=rec&uniId=6500000000&acceptCode=4100&drainNel=iris&
&st=8300&type=rec&uniId=7700000000&acceptCode=8300&drainNel=teef&
1) 脚本将采用数字形式的输入参数,例如:
979035210000000098
uniId=xxxxxxxxxx
使用在参数中传递给脚本的给定长数字。
重要提示:如果uniID相同,它将替换所有uniID的相同值(在这种情况下,前两行相同,后三行相同,最后一行相同)对于下一批,它将替换上一批的+增量(5000000000)
忽略所有其他字段,不应修改它们。
./script.sh 979035210000000098
.. 还困惑吗?最终的结果可能是:
&st=1000&type=rec&uniId=979035210000000098&acceptCode=1000&drainNel=supp&
&st=1100&type=rec&uniId=979035210000000098&acceptCode=1000&drainNel=supp&
&st=4100&type=rec&uniId=979035215000000098&acceptCode=4100&drainNel=ured&
&st=4200&type=rec&uniId=979035215000000098&acceptCode=4100&drainNel=iris&
&st=4300&type=rec&uniId=979035215000000098&acceptCode=4100&drainNel=iris&
&st=8300&type=rec&uniId=979035220000000098&acceptCode=8300&drainNel=teef&
应替换该文件并将其应用于tempfile datanew.txt,而不仅仅是在屏幕上打印。
&st=xxx
&acceptCode=xxx
但也许我可以重复使用,不能让它像我期望的那样工作?
# $./script.sh [STARTCOUNT] < data.txt > datanew.txt
# $ mv -f datanew.txt data.txt
awk -F '&' -v "cnt=${1:-10000}" -v 'OFS=&' \
'NR == 1 { ac = cnt; uni = $4; }
NR > 1 && $4 == uni { cnt += 100 }
$4 != uni { cnt += 5000000000; ac = cnt; uni = $4 }
{ $2 = "st=" cnt; $5 = "acceptCode=" ac; print }'