Bash 脚本在文件中带有 echo - printf 的奇怪行为

Bash 脚本在文件中带有 echo - printf 的奇怪行为

如果与某些条件匹配,我想在另一个文件中打印 .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';'

相关内容