BASH:使用grep循环遍历CSV和cURL行

时间:2018-10-03 13:58:36

标签: bash macos curl grep

我的目标是在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

谢谢

2 个答案:

答案 0 :(得分:1)

bash manual

  

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

由于您仅提供一个名称,因此col1不是第一列,而是整行。

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

答案 1 :(得分:0)

修复了以下问题:

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

谢谢您的评论