如果与某些条件匹配,我想在另一个文件中打印 .csv 文件的部分内容:
csv内容是这样的
abc test;ABCtest.it
xyz test;XYZtest.com
我读取变量中的内容,然后用 grep 查找一些字符串
csvContent=$(<$file.csv)
csvRow="$(echo "$csvContent" | grep -i "abc test")"
IFS=';' read -a array <<< "$csvRow"
name="${array[0]}"
url="${array[1]}"
echo -ne "\n$url,$name" >> "$outputDir/$fileName"
但输出文件不包含 url 部分
如果我尝试这个
echo $url
它打印在终端上!
我也尝试过使用 printf 和硬编码的文件名,但什么也没有!
printf '%s %s\n' "$url" "$name" >> test.txt
似乎当我尝试在变量 $url 之后连接另一个东西(变量或字符串)时,其中的某些部分被删除或覆盖到输出文件中
例如,如果我尝试这样做
printf '%s %s\n' "$url" "pp" >> test.txt
我通过简单的 cat test.txt 得到的是这样的:
pptest.it
就好像它的一部分被一个起始的空白空间覆盖
变量 $url 的内容必须是ABC测试.it
这很奇怪
答案1
文件中行的末尾有回车符file.csv
,因此它们会被读入您的url
变量中。因此,当您将其写出时,URL 数据后面会跟有回车符,并被后续数据覆盖。
答案2
如果它是像这样的标准 csv 文件
col1,col2,abc test;ABCtest.it,col4,col5
col1,col2,xyz test;XYZtest.com,col4,col5
您可以使用 cut 或 awk。
grep -i "abc test" <filename.csv> | cut -f3 -d',' | cut -f2 -d';'