【发布时间】:2014-07-16 09:34:22
【问题描述】:
我有以下 CSV 文件(我有 linux red-hat 6.2 版本)
# more SIMPLE_FILES.CSV
FILE1,FILE2,FILE3
/etc/hosts,/etc/info.txt,/var/log.txt
/etc/some_file,/var/collect.txt,/etc/INFO.txt
/sbin/ls,/sbin/awk,/sbin/sed
# more COMPLEX_FILES.CSV
FILE1,FILE2,FILE3
/etc/config/net ip.txt,/var/log/summary snap/LOG OF global/info.txt
/etc/hosts files hosts.info/etc/hosts,var/log/messages,/sbin/collect file/all.info
/etc/old/TEXT INFO/info.txt/etc/OLD FILES/info.txt,/root/customor select/info.txt
以下 bash 脚本应读取 CSV 文件并打印 FILE1,FILE2,FILE3
的文件 PATHremark - 我仅设置参数 CSV_LINE=2 (CSV 中的第二个值)
#!/bin/bash
CSV=SIMPLE_FILES.CSV
CSV_LINE=2
eval $(awk -v A=$CSV_LINE -F, 'NR==1 { for (i=1; i<=NF; i++) sn[i]=$i }
NR==A { for (i=1; i<=NF; i++) print sn[i] "=" $i; exit }' $CSV )
echo $FILE1
echo $FILE2
echo $FILE3
所以如果我运行 bash 脚本(当我设置 CSV=SIMPLE_FILES.CSV 时)得到以下内容
/read_path_from_csv.bash
/etc/hosts
/etc/info.txt
/var/log.txt
到目前为止还不错,
但如果我运行 bash 脚本(当我设置 CSV=COMPLEX_FILES.CSV 时)得到 follwoiojng
./read_path_from_csv.bash: line 20: ip.txt: command not found
我的结论 - 似乎 PATH 中的空格会导致此错误
请告知如何更新我的代码以打印 COMPLEX_FILES.CSV 中定义的 PATH,
如何在PATH前加一个",在PATH后加一个"?
举例我应该得到什么:
/read_path_from_csv.bash
/etc/config/net ip.txt,/var/log/summary snap/LOG OF global/info.txt
/etc/hosts files hosts.info/etc/hosts,var/log/messages,/sbin/collect file/all.info
/etc/old/TEXT INFO/info.txt/etc/OLD FILES/info.txt,/root/customor select/info.txt
【问题讨论】:
-
我看不到 COMPLEX_FILES.csv 输入和输出之间的区别,除了第一行没有打印。你能指出来吗?
-
第一行不打印,因为它们是参数,我们只想打印第二行中的值直到结束
-
那为什么不直接
awk 'NR>1' file呢?目前还不清楚你想要什么,而且绝对使用eval看起来有点奇怪。 -
awk 'NR>1' 仅打印值,但我需要将值设置为 CSV 第一行中定义的参数(参数应打印在 bash脚本)
-
如果您有其他想法,请告诉我