我有一个包含以下文件的文件夹:
DA-001-car.jpg
DA-001-dog.jpg
DA-001-coffee.jpg
DA-002-house.jpg
DA-003-coffee.jpg
DA-003-cat.jpg
...
我想生成此(CSV)输出:
SKU, IMAGE
DA-001, "DA-001-car.jpg, DA-001-dog.jpg, DA-001-coffee.jpg"
DA-002, "DA-001-house.jpg"
DA-003, "DA-001-coffee.jpg, DA-001-cat.jpg"
我尝试在Bash中对此进行编程:
#!/bin/bash
echo "SKU, FILE" >> tmp.csv
for file in /home/calvin/test/*.jpg
do
SKU_NAME="${file##*/}"
echo ${SKU_NAME:0:6}, \"inner for-loop?, ?, ?\" >> tmp.csv
done
uniq tmp.csv output.csv
您可以看到,对于编程我是一个菜鸟:)请帮帮我,谢谢!!
我有一个包含以下文件的文件夹:DA-001-car.jpg DA-001-dog.jpg DA-001-coffee.jpg DA-002-house.jpg DA-003-coffee.jpg DA-003- cat.jpg ...我想生成以下(CSV)输出:SKU,IMAGE DA -...
这可以解决问题。这需要GNU awk
以升序输出。如果您不关心订单,则可以使用任何旧的awk
并删除PROCINFO
行
如果文件名不包含空格,则可以使用sed代替内部循环:
awk '
BEGIN {
OFS = ", "
print "SKU", "IMAGE"
for (i=1; i<ARGC; i++) {
curr = fname = ARGV[i]
sub(/-[^-]+$/,"",curr)
if ( curr != prev ) {
if ( i > 1 ) {
print prev, "\"" fnames "\""
}
prev = curr
fnames = ""
}
fnames = (fnames == "" ? "" : fnames OFS) fname
}
print prev, "\"" fnames "\""
exit
}
' /home/calvin/test/*.jpg
SKU, IMAGE
DA-001, "DA-001-car.jpg, DA-001-coffee.jpg, DA-001-dog.jpg"
DA-002, "DA-002-house.jpg"
DA-003, "DA-003-cat.jpg, DA-003-coffee.jpg"
作为所有答复的结果,并建议我使用此代码来实现所需的输出: