如何编写 csvcut 脚本来按多个文件的标题剪切列?

如何编写 csvcut 脚本来按多个文件的标题剪切列?

自从csvcut(从csvkit)一次不会占用多个文件,我需要编写一个脚本来使用它处理多个文件。

第一个参数应该是分隔符,第二个参数应该是要提取的列的标题,其余参数是文件名。

如果文件名丢失,脚本应为标准输入。

应该是这样的

csvcut ';' Measure calories.csv

我不太熟悉csvkit。有人可以帮忙吗?

答案1

假设您要处理的所有 CSV 文件具有相同的列数和顺序。

#!/bin/sh

delim=$1
cols=$2

if [ -z "$delim" ] || [ -z "$cols" ]; then
    echo 'missing delimiter and/or columns' >&2
    exit 1
fi

shift 2

csvstack --delimiter "$delim" "$@" |
csvcut --columns "$cols"

该脚本将采用两个或更多参数。第一个是分隔符,第二个是要提取的列的名称或编号(可以使用逗号分隔列表)。其余参数用作要处理的文件名。

如果仅有的给出两个参数,标准输入将用作数据进行处理。

csvstack命令用于创建给定文件的单个 CSV 数据流,并csvcut用于提取所需的列。请注意,输出中的分隔符csvstack从输入中的任何内容更改为逗号。如果您要提取多列,并且需要特定的分隔符,请传递结果并使用( )csvformat指定分隔符。-D--out-delimiter

运行示例:

$ cat file1.csv
a;b;c
1;2;3
$ cat file2.csv
a;b;c
4;5;6
$ sh script.sh ';' 'a,c' file*
a,c
1,3
4,6

相关内容