从 csv 读取输入并使用 shell 脚本将该值附加到变量

Read input from a csv and append that values to variable using shell script

#!/bin/bash

Dir="" 
while read line
    do echo "Record is :$line"
    Dir+="Dir,$line" 
done < dir.csv 

echo $Dir

其中 dir.csv 是一个输入文件,其中包含以下数据:

/example/people/
/book/
/book/english/

我想将行的值附加到一个变量中,例如 /example/people/,/book/,/book/english/

有什么简单的方法可以通过 shell 脚本来实现吗?上面的脚本只显示最后一个值 ex:/book/english/

这更容易:

xargs < dir.csv|sed 's/ /,/g'

或者如果您有 CRLF 行结尾,您可以使用以下方法清理它们:

xargs < dir.csv|tr -d '\r'|sed 's/ /,/g'

上面提出的tr '\n' ',' < dir.csv如果CSV以换行符结尾

可以在最后加一个额外的,

我在你的代码中没有看到任何会导致你的脚本只显示最后一个值的内容。

这可能是一种错觉:你的dir.csv文件是CRLF-delimited吗? (DOS/Windows 格式)如果是这样,删除以 dos2unix 等实用程序或 tr -d '\r'.

等命令结束每行的 CR

一些注意事项:

  • Dir+="Dir,$line" 中,可能应该删除字符串 Dir (Dir+=",$line")。
  • 您可能想去掉开头的逗号:Dir=${Dir#,}.
  • 所有这些都可以通过下面的单个命令来简化:
Dir=$(paste -s -d, dir.csv)

... 或者,使用 CRLF 行结尾:

Dir=$(tr -d '\r' < dir.csv | paste -s -d,)