如何根据 CSV 内容移动文件?

如何根据 CSV 内容移动文件?

我有一个 CSV 文件,以逗号分隔。我需要将第 3 列中列出的文件移动到第 12 列中列出的文件夹中。我使用以下方法将两列输出到不同的文本文件中:

awk -F ',' '{print $3}' /Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv > ../files.txt

awk -F ',' '{print $12}' /Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv > ../dates.txt

然后我尝试:

对于 'ls' 中的 IX ; 执行 mv -i `cat ../files.txt` `cat ../dates.txt` ; 完成

但事实并非如此。

我确信如果我不是新手的话这会很简单,但我就是想不通。

例子:

192543,FYI,BuyingTheView_SunsetCondoToronto_192543_SLING.xml,1_27_17 16:32,"2,299",,Yes,2017-01-30,2017-03-05,1_30_17,3_5_17

BuyingTheView_SunsetCondoToronto_192543_SLING.xml是文件,3_5_17是文件夹。

笔记:由于页面格式的原因,我在帖子中使用了单引号'而不是勾号。

答案1

如何根据 CSV 内容移动文件?

概括:循环遍历 CSV 本身并提取文件名目录字段使用cut

我明白你为什么会朝这个方向开始;但是,你可以循环遍历 CSV 文件本身,而不是将文件名和目录拆分成单独的文件。基于此,并将字段编号和 CSV 文件路径等一些内容放入变量中,以防它们在某个时候发生变化,你可以按照以下方式进行操作:

/bin/bash #!/bin/bash
# move_csv.sh - 根据 CSV 中的字段移动 XML 文件

文件名字段=3
目标字段=12
csvfile="/Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv"

读取 csv_line 时;执行
    mv "`echo $csv_line | cut -d',' -f$filename_field`" "`echo $csv_line | cut -d',' -f$destination_field`"
    # 例如 mv "BuyingTheView_SunsetCondoToronto_192543_SLING.xml" "3_5_17"
完成 < $csv文件

(稍微有点快而且有点脏;可能有更多惯用的方法从行中提取字段,mv而不是使用两个单独的子进程和调用cut,但这至少在我的快速测试中有效)

示例“输出”(基于与您拥有的格式相似的虚构数据):

mv“BuyingTheView_SunsetCondoToronto_192543_SLING.xml”“3_5_17”
mv“BuyingTheView_SunriseCondoToronto_192544_SLING.xml”“3_5_18”
mv“BuyingTheView_LakeviewCondoToronto_192545_SLING.xml”“3_5_18”
mv“BuyingTheView_SunsetCondoVancouver_192546_SLING.xml”“3_5_19”
mv“BuyingTheView_SunsetCondoOttawa_192547_SLING.xml”“3_5_20”
mv“BuyingTheView_SunsetApartmentMontreal_192548_SLING.xml”“3_5_20”

(这不是真正的输出;这些是mv脚本查看 CSV 时将执行的命令。)

警告:注意这个脚本在哪个目录中运行!它假设 XML 文件存在于工作目录(脚本从中运行)中,并且子目录已经存在。如果不是这种情况,则将 添加到正确的工作目录或使用基本目录添加到命令cd中的路径相对简单mv

答案2

在您的示例中,192543,FYI,Buy...,1_...,"2,299",,Yes,2017...,2017...,1_...,3_5_17第五个字段("2,299")中有一个逗号。我猜想,如果此字段少于 1,000,则不会有逗号。因此,只有 11 个字段,而不是 12 个。您可以尝试:

awk -F, '{print $3 " " $NF}' /Users/amermels/Documents/MERGED/Sling\ Manifest\ 2-17-2017.csv | xargs -n 2 mv {} {}

相关内容