У меня есть следующие файлы 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 и распечатать PATH файлов для FILE1,FILE2,FILE3
примечание - я устанавливаю параметр 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), я получаю следующее
./read_path_from_csv.bash: line 20: ip.txt: command not found
Мой вывод - кажется, что пробелы в PATH вызывают эту ошибку
пожалуйста, посоветуйте, как обновить мой код, чтобы напечатать PATH, как определено в COMPLEX_FILES.CSV,
Как добавить один " перед 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
awk 'NR>1' file
? До сих пор не ясно, чего вы хотите, и определенно использованиеeval
выглядит немного странно. - person fedorqui 'SO stop harming'   schedule 16.07.2014