比较2个文件并使用awk / sed / bash删除符合条件的行

时间:2017-11-22 13:54:22

标签: bash awk sed

我是awk和sed的新手并且有以下要求。

以下是文件数据

旧文件:

SNO,ID,SHAPE,COST,CURRENTCOST
1,ABC,EFG,123,123
2,EEC,EFG,123,12
3,ARR,EFG,123,12

新文件:

SNO,ID,SHAPE,COST,CURRENTCOST
1,ABC,EFG,123,0
2,EEC,EFG,123,12
3,ARR,EFG,123,12 

预期输出文件:

SNO,ID,SHAPE,COST,CURRENTCOST
2,EEC,EFG,123,12
3,ARR,EFG,123,12

首先,我想比较ID,如果它们匹配CHECK IF CURRENTCOST(第5列)是0,如果它是0,则从新文件中删除该行

以下是代码流

if(CURRENTCOST == 0)
THEN 
  IF(FIRST FILE ID == SECOND FILE ID)
     THEN DELETE THE LINE FROM SECOND FILE 
  ELSE
     DO NOTHING

另外,如果条件为真,我可以跳过复制该行并将其他行复制到新文件

希望这有帮助。

由于 特加斯

2 个答案:

答案 0 :(得分:1)

使用awk即可:

awk -F, 'NR == FNR {a[$1]=$5; next} !($1 in a && $5 == 0)' oldFile newFile

SNO,ID,SHAPE,COST,CURRENTCOST
2,EEC,EFG,123,12
3,ARR,EFG,123,12

答案 1 :(得分:0)

grep -v '0$' newFile  | join -t , -o 2.{1..5} oldFile -
  1. 从newFile中删除不需要的行
  2. 使用stdin
  3. 中的修改内容加入oldfile
  4. 仅从newfile中选择列