1

任何人都可以帮我解决 awk 命令中的以下情况

需要在一个表中的文件中进行 bcp,其中将存在多个列,并且需要在所有列中搜索特定值,然后如果模式在列的任何一个中匹配,则该值应该在另一列中更新 n 相同桌子。

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 OR COL2 OR COL3 匹配 '17' 则对应的 COL_AMT 应该在同一个表的另一列中更新。在这种情况下,COL3 = '17' 和 COL3_AMT 73 应该在同一个表的 FIN_AMT 列中更新。

提前致谢

4

2 回答 2

2

这可以使它:

awk '{for (i=1;i<=3;i++) if ($i==17) {$7=$(i+3)}} {print}' file

循环遍历字段 1 到 3,如果是 17,则使用COLi_AMT值更新第 7 列 (FIN_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
于 2013-06-10T09:14:07.933 回答
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-th 列更新最后一列,所以2*3 = 第 6 列值,然后它打破了 for 循环(因为不会再有值 17)

于 2013-06-10T09:12:08.617 回答