【问题标题】:BASH: Loops through CSV and cURL rows with grep [duplicate]BASH:使用 grep 循环遍历 CSV 和 cURL 行 [重复]
【发布时间】:2019-03-08 18:49:06
【问题描述】:

我的目标是在 bash 中循环遍历一个 CSV 文件,我有一些可以正常工作的代码。它似乎没有完成 cURL,因为命令会立即完成并添加到失败文件中。它正在读取 URL 的单列 CSV。

我研究过但没有成功,查看 GREP 成功代码等。这只是在 MACOS 上本地运行。

INPUT=test.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read col1
do
    if curl -L -s "$col1" | grep -q "string"; then
        echo "${col1}" >> one.txt
    else
        echo "${col1}" >> two.txt
    fi
done < $INPUT
IFS=$OLDIFS

我还在 IF 行上尝试了以下操作: if [[ $(curl -L -s "$col1" | grep -q "string") ]]; then

谢谢

【问题讨论】:

  • 拥有 test.csv 的一部分会很棒
  • 让我们尝试调试它。在do 之后立即添加一行echo $col1,这样您就可以看到您从阅读test.csv 获得的内容是否真的是您想要的。
  • echoing col1 为我提供了新行上的域,我还根据@PTRK 指令添加了剩余部分。
  • 请修改您的问题,用几行 test.csv 添加脚本的输出。
  • 删除 -s 后出现以下错误curl: (3) Illegal characters found in URL 所以它必须是 cURL 中的 URL

标签: bash macos curl grep


【解决方案1】:

修复了以下内容:

col1=${col1%$'\r'} - 从输出中删除句号。

INPUT=test-sites.csv
OLDIFS=$IFS
IFS=,
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }
while read col1 leftover
do
    col1=${col1%$'\r'}
    if curl -L "${col1}" | grep -q "string"; then
        echo "${col1}" >> one.txt
    else
        echo "${col1}" >> two.txt
    fi
done < $INPUT
IFS=$OLDIFS

感谢您的cmets

【讨论】:

  • 这些是回车,而不是“句号”。正确的解决方案是不使用 Windows 编辑器。
【解决方案2】:

来自bash manual

从标准输入或文件中读取一行 描述符 fd 作为参数提供给 -u 选项,第一个 单词分配给第一个名字,第二个单词分配给第二个 名称等,带有剩余的单词及其中间的分隔符 分配给姓氏

因为您只提供一个名称,所以 col1 不是第一列,而是整行。

试试while read col1 leftover 并使用@gboffi 的评论建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2015-08-17
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多