Bash 使用Automator服务拆分csv文件(查找器上下文菜单)

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中的

我正在尝试为查找程序的右键单击上下文菜单创建一个Automator服务,该菜单可以拆分任何选定的csv文件,同时在每个文件顶部复制原始标题

我当前的尝试是使Automator运行:

此脚本将
MY_CSV_FILE.CSV
拆分为最多50行的新文件,同时在每个文件顶部的原始标题中进行复制。新文件的原始名称将附加
xaa
xab
xac

关于Automator设置,这是我目前正在使用的服务。现在的问题是我无法将Finder中选择的文件传递给Bash脚本

请注意:

  • 服务接收:Finder.app中的文件或文件夹
  • 将输入作为参数传递给Shell脚本
  • 我已删除
    #/bin/bash
    并将Shell设置为:/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 pattern
x???
匹配的文件,那么原始脚本就不那么安全。执行
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