Bash 使用Automator服务拆分csv文件(查找器上下文菜单)
我正在尝试为查找程序的右键单击上下文菜单创建一个Automator服务,该菜单可以拆分任何选定的csv文件,同时在每个文件顶部复制原始标题 我当前的尝试是使Automator运行: 此脚本将Bash 使用Automator服务拆分csv文件(查找器上下文菜单),bash,macos,automator,Bash,Macos,Automator,我正在尝试为查找程序的右键单击上下文菜单创建一个Automator服务,该菜单可以拆分任何选定的csv文件,同时在每个文件顶部复制原始标题 我当前的尝试是使Automator运行: 此脚本将MY_CSV_FILE.CSV拆分为最多50行的新文件,同时在每个文件顶部的原始标题中进行复制。新文件的原始名称将附加xaa、xab、xac等 关于Automator设置,这是我目前正在使用的服务。现在的问题是我无法将Finder中选择的文件传递给Bash脚本 请注意: 服务接收:Finder.app中的
MY_CSV_FILE.CSV
拆分为最多50行的新文件,同时在每个文件顶部的原始标题中进行复制。新文件的原始名称将附加xaa
、xab
、xac
等
关于Automator设置,这是我目前正在使用的服务。现在的问题是我无法将Finder中选择的文件传递给Bash脚本
请注意:
- 服务接收:Finder.app中的文件或文件夹
- 将输入作为参数传递给Shell脚本
- 我已删除
并将Shell设置为:/bin/bash#/bin/bash
- 我切换了
以获得MY_CSV\u FILE.CSV
——不确定这是否正确“$f”
“$f”
不太熟悉
我怎样才能做到这一点?我希望生成的文件通过Finder右键单击菜单显示在与我选择运行服务的文件相同的文件夹中。如果该服务只接受csv文件就更好了
使用$1、$2、$3等来访问传递到脚本中的参数。如果要将所有参数引用为数组,请使用$@。我编辑脚本以满足需要
set -e
for FILE in "$@"
do
#must be a file size bigger than zero with extension csv
if test -f ${FILE} && test -s ${FILE} && test ${FILE: -4} == ".csv" ; then
NAME=${FILE%%.csv}
head -1 ${FILE} > header.csv
tail -n +2 ${FILE} > data.csv
split -l 50 data.csv
for a in x??
do
cat header.csv ${a} > ${NAME}.${a}.csv
done
rm header.csv data.csv x??
fi
done
注意,如果您的目录header.csv
data.csv
中有这样的文件,或者任何与glob patternx???
匹配的文件,那么原始脚本就不那么安全。执行rm header.csv data.csv x???
时,将删除所有这些文件
set -e
for FILE in "$@"
do
#must be a file size bigger than zero with extension csv
if test -f ${FILE} && test -s ${FILE} && test ${FILE: -4} == ".csv" ; then
NAME=${FILE%%.csv}
head -1 ${FILE} > header.csv
tail -n +2 ${FILE} > data.csv
split -l 50 data.csv
for a in x??
do
cat header.csv ${a} > ${NAME}.${a}.csv
done
rm header.csv data.csv x??
fi
done