【问题标题】:Using awk to try to find a variable in a CSV line使用 awk 尝试在 CSV 行中查找变量
【发布时间】:2017-11-25 22:03:28
【问题描述】:

我正在尝试浏览两个文件。逐行第一个,同时使用 awk 搜索包含从第一个文件中提取的字符串的行。

while IFS=, read col1 col2 col3
do
    echo $(awk -F, -v var="$col2" '$2==var || $2=="www."var {print $0}' searchFile.csv)
    //do stuff with data from awk
done < origFile.csv

我正在尝试在此文件中查找域名,而 awk 目前从未返回匹配项。我已经手动检查了这些文件,以确保其中一些没有返回匹配项,并且它们是。

我尝试过使用嵌套循环,但 bash 不想打开第二个文件进行读取,也不会读取第二个文件。我也尝试过使用 grep,但是文件太大,grep 会耗尽内存。

searchFile.csv 的示例输入:

4915,google.com,oct
3532,domain.ca,nov
33451,yahoo.ca,nov

我已确保输入的数据中没有空格,并已验证 origFile.csv 中的 $col2 与 searchFile.csv 中的数据匹配

【问题讨论】:

  • 您应该发布一两行与您正在解析的文件匹配的行。
  • 请发布示例输入和示例输出..
  • 我更新了输入,代码没有输出。
  • 尽管我不喜欢你的代码风格,但我没有看到任何错误。你为什么要回显到 STDOUT 的东西?无论如何,做一个file searchFile.csv,也可以在 origFile.csv 上做一个。验证它们是纯 ascii 文件,没有奇怪的字符。
  • @BreannaWilson 我们显然不是要求查看尚不存在的工具的输出,而是要求您发布您想要的 desired 输出一旦它确实存在,就可以从这样的工具中获取。还要发布origFile.csv 的内容,这样我们就有了简洁、可测试的样本输入和给定该输入的预期输出。如果不清楚,请参阅How to Ask

标签: bash csv variables awk


【解决方案1】:

你的数据文件有空格吗?如果是这样,您的记录 ($2) 将包含空格并且可能不匹配(因为您使用的是 awk -F,)。尝试使用 ~ 而不是 == 匹配。

【讨论】:

  • 源数据中没有空格,用逗号分隔。
  • @Justin,使用 cmets 提问,而不是回答 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多