【问题标题】:How to use awk to delete rows from one csv, some values in a column of which matche the other csv column?如何使用awk从一个csv中删除行,其中一列中的某些值与另一个csv列匹配?
【发布时间】:2013-04-12 10:26:07
【问题描述】:

我一直在尝试从 csv 中删除特定列中的条目与其他 csv 中的条目匹配的行(记录)。

csv结构大致是这样的:

1.csv

Col1,Col2,Col3,Col4,Col5
sasdf,3432,fjkdk,fjjof,1234
efvr,4565,fhjs,dihi,9999
asa,234,rgs,fkjf,0102
aaa,456,jfvv,dofh,4565
ths,7865,fhjf,fhks,3212

2.csv

Col1    
1234
3212    
0102
4565

如您所见,1.csv 的 col5 中有一些值出现在 2.csv 的 col1 中 我想使用 awk 从 1.csv 中删除与 2.csv 的 col1 匹配的行(记录)

所以输出应该是这样的:

3.csv

Col1,Col2,Col3,Col4,Col5
efvr,4565,fhjs,dihi,9999

这是我使用的 awk 脚本:

awk -F"," 'NR==FNR{array1[FNR]=$1};NR>FNR{array1[FNR]!~$5}' 2.csv 1.csv > 3.csv

没有用。

【问题讨论】:

  • 我不确定您为什么认为完全更改输入文件会有所帮助。仅在提问时发表代表意见。
  • 哦,我会处理好这件事的..

标签: csv awk


【解决方案1】:

这样就可以了:

$ awk -F, 'NR==FNR{a[$1];next}!($5 in a)' 2.csv 1.csv
Col1,Col2,Col3,Col4,Col5
efvr,4565,fhjs,dihi,9999

$ awk -F, 'NR==FNR{a[$1];next}!($5 in a)' 2.csv 1.csv > 3.csv

【讨论】:

  • 我很困惑它是否会读取 5 美元,除非我更改 NR==FNR 条件,因为它来自第二个输入文件。再次感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多