【问题标题】:Bash - Deleting the same rows in two CSV filesBash - 删除两个 CSV 文件中的相同行
【发布时间】:2017-05-11 05:56:17
【问题描述】:

我有两个 CSV 文件 - nodes.csv 和 edges.csv - 其中的列是制表符分隔的。我使用

删除了nodes.csv中的某些行
awk -F'\t' -i inplace '($3 != "Symbol")' nodes.csv

如何删除edges.csv中的对应行?

例如,在nodes.csv中,我有:

ANR 35755   ParameterType   uint32_t
CYP 35756   Identifier      status
ANR 35757   CFGEntryNode    ENTRY
ANR 35758   CFGExitNode     EXIT
ANR 35759   Symbol          * host
CYP 35760   Symbol          * irq_status_bits
ANR 35761   Symbol          irq_status_bits

在 edges.csv 中,我有:

35738   35758   FLOWS_TO
35689   35759   USE
35701   35759   USE
35727   35760   USE
35734   35760   USE
35727   35761   USE
35735   35761   USE

我需要删除 nodes.csv 中的第 5、6、7 行,因为第 3 列有值符号。如何删除 edges.csv 中的第 5、6、7 行?

输出: nodes.csv

ANR 35755   ParameterType   uint32_t
CYP 35756   Identifier      status
ANR 35757   CFGEntryNode    ENTRY
ANR 35758   CFGExitNode     EXIT

edges.csv:

35738   35758   FLOWS_TO
35689   35759   USE
35701   35759   USE
35727   35760   USE

非常感谢!

【问题讨论】:

  • 你如何定义corresponding rows
  • 请从edges.csv 中显示您想要保留和删除的行的示例行。
  • 我更新了我的问题,如果有帮助的话!
  • 如果没有edges.csv 的示例以及您要从中删除的内容的精确定义,这个问题就非常模糊。
  • 非常抱歉,我没有意识到这个问题含糊不清。我已经修好了,希望没问题!

标签: bash shell awk


【解决方案1】:
awk -F'\t' -i inplace 'NR==FNR{if ($3 != "Symbol") a[NR]} FNR in a' nodes.csv edges.csv

【讨论】:

  • 非常感谢您回答我的问题!并编辑我的答案。如果你不介意,你能解释一下脚本在做什么吗?
  • 它通过检查第一个文件的内容,然后仅从两个文件中打印出具有这些行号 (FNR in a) 的行,从而用“好”行号填充数组 a[]
猜你喜欢
  • 2016-04-02
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
相关资源
最近更新 更多