Mac OSX终端:为300个CSV文件批量添加含文件名的列
给Mac下批量CSV文件添加文件名列的简单办法
嘿,刚接触终端完全不用慌!我给你个用Mac自带工具就能搞定的方案,不用装任何额外软件,步骤也很清晰:
第一步:先拿单个文件测试(推荐新手先做这步)
先找一个CSV文件试试水,确保命令符合你的需求。打开终端,切换到CSV文件所在的文件夹(用cd 你的文件夹路径,比如cd ~/Documents/csv_files),然后运行下面的命令:
awk -v fname="$(basename test.csv)" 'BEGIN{FS=OFS=","} {print $0, fname}' test.csv > modified_test.csv
我给你拆解下每个部分的意思:
awk:Mac自带的文本处理工具,专门干这种每行处理的活-v fname="$(basename test.csv)":定义一个叫fname的变量,存的是去掉路径的纯文件名(比如test.csv,而不是/Users/xxx/test.csv)BEGIN{FS=OFS=","}:告诉awk,输入和输出的分隔符都是逗号,这样加的列会和原内容用逗号分开,符合CSV格式print $0, fname:$0代表当前行的全部内容,这里就是把每行内容后面加上文件名列> modified_test.csv:把处理后的内容存到一个新文件里,不会覆盖原文件,很安全
运行完你可以打开modified_test.csv看看,是不是每行最后都多了一列文件名~
第二步:批量处理所有300个CSV文件
测试没问题后,就可以批量处理了!还是在CSV文件所在的文件夹里,运行下面的命令:
for file in *.csv; do awk -v fname="$(basename "$file")" 'BEGIN{FS=OFS=","} {print $0, fname}' "$file" > "modified_$file" done
这个命令的作用是:
- 遍历当前文件夹里所有
.csv结尾的文件 - 对每个文件执行和第一步一样的处理
- 处理后的文件会以
modified_原文件名.csv的名字保存,比如原文件是data1.csv,处理后就是modified_data1.csv
新手注意事项
- 千万不要直接覆盖原文件!用上面的方法生成新文件,万一处理错了还能找回原文件
- 如果你的CSV文件里有带逗号的引号内容(比如
"张三,北京"),这个简单命令可能会出错,要是遇到这种情况可以告诉我,我再给你更精准的方案 - 要是不知道怎么切换到文件夹路径,可以把文件夹拖到终端窗口里,终端会自动显示路径,再加上
cd(注意cd后面有空格)就行
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

