【问题标题】:Using awk command to filter out specific columns from a huge file [duplicate]使用 awk 命令从大文件中过滤掉特定列[重复]
【发布时间】:2019-01-10 04:44:48
【问题描述】:

我目前正在处理一个相当大的 csv 文件,它有 170 列。我想使用awk 过滤过滤掉三个特定列,然后将该文件导出,以便导出的文件仅包含 170 列中的 3 个。

gzcat filename.csv.gz | awk '$19=="ACCOUNT_MOBILE_NUMBER" || $26=="DEVICE_ADID_TYPE" || $27=="DEVICE_ADID"' | gzip > filename_FILTERED.csv.gz

预期结果:新导出的文件仅包含这三列及其对应的值/行

到目前为止的实际结果:新导出的文件是空白的

【问题讨论】:

  • 您需要提供来自filename.csv.gz的输入文件的小sn-p
  • 这是一个 csv...所以它是逗号分隔的,不是吗?使用-F, 标志再次尝试您的awk
  • 另一种方式:gunzip | cut
  • 您的脚本会在相应列中查找包含这些值之一的行(如果找到,则会打印所有列)。显然,该文件不包含任何具有这些值的行。

标签: shell awk


【解决方案1】:

我认为您可能正在寻找更多类似的东西:

gzcat filename.csv.gz |
awk -F, '{print $19,$26,$27}' |
gzip > filename_FILTERED.csv.gz

【讨论】:

  • ...虽然如果 CSV 包含引用,您可能需要稍微多一些的东西,可能有点像 stackoverflow.com/questions/52466382/…
  • ... 如果没有,cut -d, -f19,26,27 可能比 Awk 脚本更快且更易读。
  • cut -d 函数给了我我需要的东西。谢谢大家
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 2013-04-24
  • 2010-09-30
  • 1970-01-01
  • 2021-07-22
  • 2020-11-08
  • 2019-09-20
相关资源
最近更新 更多