从 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,)
#!/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'
.
一些注意事项:
- 在
Dir+="Dir,$line"
中,可能应该删除字符串Dir
(Dir+=",$line"
)。 - 您可能想去掉开头的逗号:
Dir=${Dir#,}
. - 所有这些都可以通过下面的单个命令来简化:
Dir=$(paste -s -d, dir.csv)
... 或者,使用 CRLF 行结尾:
Dir=$(tr -d '\r' < dir.csv | paste -s -d,)