自从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