我试图创建一个自动服务为Finder的右击上下文菜单,可以分割任何选定的csv文件,同时复制在原始头在每个文件的顶部。
我目前的尝试是让Automator运行this Bash Shell Script
#!/bin/bash
FILE=$(ls -1 | grep MY_CSV_FILE.csv)
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??
此脚本将MY_CSV_FILE.csv
拆分为最多50行的新文件,同时在每个文件的顶部复制原始标题。新文件的原始名称将附加xaa
、xab
、xac
等。
关于自动设置,这是我目前正在工作的服务。现在的问题是,我无法将Finder中选定的文件传递给Bash脚本。
请注意:
#!/bin/bash
,并将Shell设置为: /bin/bash。MY_CSV_FILE.csv
换成了"$f"
--不确定这是否正确。我是否还需要为输入文件和结果输出文件使用类似"$@"
的内容来指定路径?我以前没有做过这样的事情,所以我对这个变量和"$f"
并不熟悉。
我怎么能让这件事成功呢?我希望结果文件显示在与我选择运行服务的文件相同的文件夹中,通过Finder右键单击菜单。如果服务只接受csv文件,那就更好了。
发布于 2017-08-12 00:42:26
我编辑你的脚本以满足需求
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模式x??
匹配的文件中都有这样的文件,那么原始脚本就不是那么安全了。在执行rm header.csv data.csv x??
时,所有这些文件都将被删除。
发布于 2017-08-09 10:33:13
使用$1、$2、$3等来访问传递给脚本的参数。如果要将所有参数作为数组引用,请使用$@。
https://stackoverflow.com/questions/45593352
复制