任何人都可以帮我解决awk命令中的以下情况
需要bcp在一个表中的文件中,其中存在多个列,并且需要在所有列中搜索particluar值,然后如果模式在列的任何列中匹配,那么该值应该在另一列中更新在同一张桌子上。
example: Table A
COL1 COL2 COL3 COL1_AMT COL2_AMT COL3_AMT FIN_AMT
12 16 17 56.00 78.00 73.00 0.00
如果COL1或COL2或COL3匹配'17',那么相应的COL_AMT应该在同一个表的另一列中更新。在这种情况下,COL3 ='17',COL3_AMT 73应该在同一个表的FIN_AMT列中更新
提前致谢
答案 0 :(得分:2)
这可以做到:
awk '{for (i=1;i<=3;i++) if ($i==17) {$7=$(i+3)}} {print}' file
循环显示字段1到3,如果是17,则更新第7个字段(FIN_AMT),其值为COLi_AMT
。
$ awk '{for (i=1;i<=3;i++) if ($i==17) {$7=$(i+3)}} {print}' a
COL1 COL2 COL3 COL1_AMT COL2_AMT COL3_AMT FIN_AMT
12 16 17 56.00 78.00 73.00 73.00
答案 1 :(得分:1)
Awk是你的朋友
awk '{
for(i=1;i<= ((NF-1)/2));i++) {
if($i==17) {
$NF=$(2*i);
break;
}
}
}' table.txt
这将取字段NF
的值,对于给定的示例为7,并迭代(7-1)/ 2 = 3列,如果实际列值为17,它将更新最后一列2*i
- 列,所以2 * 3 =第6列值,然后它打破for循环(因为没有更多的值17)