我有一个包含三列的CSV:object-ID,image-url1,image-url2。我希望能够运行一个bash脚本,为CSV中的每一行执行以下操作:
我有这段代码,但需要一些帮助!
IFS=$'\n';
for file in `cat <filename.csv>`; do
echo "Creating folder $object-ID";
mkdir $object-ID
echo "Downloading image 1";
wget $image-url1
echo "Downloading image 2";
wget $image-url2
done
答案 0 :(得分:0)
试试这个:
while IFS=, read objid url1 url2;
do
echo "Creating folder $objid"
mkdir -p "$objid"
# Run in a subshell
(
cd "$objid"
echo "Downloading image 1"
wget "$url1"
echo "Downloading image 2"
wget "$url2";
)
done < myfile.csv
假设您的CSV使用逗号(,
)作为分隔符。这可以通过更改IFS=,
循环中的while
部分进行调整。
此外,如果$objid
中包含正斜杠(/
),mkdir -p
会将其视为包含子目录的路径并创建所有子目录。如果不合适,您可以/
之前的$objid
替换mkdir
,如下所示:
objid="${objid//\//_}"
答案 1 :(得分:0)
使用read
:
while IFS=',' read id image_one image_two; do
[ ! -d "${id}" ] && mkdir "${id}"
for img in ${image_one} ${image_two}; do
printf "Downloading %s" "${img}"
wget -P "${id}" "${img}"
echo "---"
done
done < file.csv
对于每一行:如果目录不存在,则根据id值创建目录,并在创建的目录中检索图像(使用-P
的{{1}}选项。)
答案 2 :(得分:0)
使用awk
:
awk -F "," '{
print "mkdir",$1"; echo wget -P",$1,$2"; echo wget -P",$1,$3
}' filename.csv | bash