用awk+for 同时对两列的值进行循环替换输出。
1.txt的数据1|201010|201010|4|5|6|2|3|4|5|6|7|8|3只有一条,如何利用awk+gsub+for循环实现对第2域中间两个值进行任意更改...
1.txt的数据 1|201010|201010|4|5|6|2|3|4|5|6|7|8|3只有一条,如何利用awk+gsub+for循环实现对第2域中间两个值进行任意更改,输出到2.txt中。
实现如下效果图:
1|201010|201010|4|5|6|2|3|4|5|6|7|8|3
1|201110|201011|4|5|6|2|3|4|5|6|7|8|3
1|201210|201012|4|5|6|2|3|4|5|6|7|8|3
。。用for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '{for(i=1;i <= NF;i++){if(i==2){printf($2+var*100);}else{printf($i)}if(i<NF){printf(FS)}}printf("\n")}' 1.txt >> 2.txt
done可实现对第2列的数序替换,怎么加个嵌套循环,对2列的中间两个数字和3列的最后两个数字同时循环替换呢? 展开
实现如下效果图:
1|201010|201010|4|5|6|2|3|4|5|6|7|8|3
1|201110|201011|4|5|6|2|3|4|5|6|7|8|3
1|201210|201012|4|5|6|2|3|4|5|6|7|8|3
。。用for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '{for(i=1;i <= NF;i++){if(i==2){printf($2+var*100);}else{printf($i)}if(i<NF){printf(FS)}}printf("\n")}' 1.txt >> 2.txt
done可实现对第2列的数序替换,怎么加个嵌套循环,对2列的中间两个数字和3列的最后两个数字同时循环替换呢? 展开
1个回答
展开全部
还是我,可以稍微的修改就可以了,但是有个缺陷后边的数字会超过12,下面同时给出了一个可以在月份超过12自动变成1然后年份添加1的版本,需要哪个自己拷吧
---------------------------------------------
for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '{for(i=1;i <= NF;i++){if(i==2){printf($2+var*100);}else{if(i==3){printf($3 + var)}else{printf($i)}}if(i<NF){printf(FS)}}printf("\n")}' 1.txt >> 2.txt
done
----------------------
下面这个版本可以修正第三列月份超过12后自动在年份上添加
--------------------------------------------------------------
for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '
{
for(i=1;i <= NF;i++){
if(i==2){
printf($2+var*100);
} else {
if(i==3){
f = substr($3, 0, 4);
last = substr($3, 5, 2);
if ((last + var) > 12){
start =int(f + ((last + var) / 12));
end = (last + var) % 12;
}else{
start = f;
end = last + var;
}
printf(start);
printf("%02d", end);
}else{
printf($i)
}
}if(i<NF){
printf(FS)
}
}
printf("\n")
}' 1.txt >> 2.txt
done
-------------------------------
上面awk展开了可以便于理解,可以自行压缩.或者将单引号('')内的awk语句保存到一个文件内用awk调用比如将awk语句存到了test.awk将上面awk语句改成下面即可
awk -F'|' var=$i -f test.awk 1.txt >> 2.txt
---------------------------------------------
for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '{for(i=1;i <= NF;i++){if(i==2){printf($2+var*100);}else{if(i==3){printf($3 + var)}else{printf($i)}}if(i<NF){printf(FS)}}printf("\n")}' 1.txt >> 2.txt
done
----------------------
下面这个版本可以修正第三列月份超过12后自动在年份上添加
--------------------------------------------------------------
for (( i = 0; i < 10000; i++))
do
awk -F'|' -v var=$i '
{
for(i=1;i <= NF;i++){
if(i==2){
printf($2+var*100);
} else {
if(i==3){
f = substr($3, 0, 4);
last = substr($3, 5, 2);
if ((last + var) > 12){
start =int(f + ((last + var) / 12));
end = (last + var) % 12;
}else{
start = f;
end = last + var;
}
printf(start);
printf("%02d", end);
}else{
printf($i)
}
}if(i<NF){
printf(FS)
}
}
printf("\n")
}' 1.txt >> 2.txt
done
-------------------------------
上面awk展开了可以便于理解,可以自行压缩.或者将单引号('')内的awk语句保存到一个文件内用awk调用比如将awk语句存到了test.awk将上面awk语句改成下面即可
awk -F'|' var=$i -f test.awk 1.txt >> 2.txt
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询