複数のファイルのヘッダーごとに列を切り捨てるcsvcutスクリプトを作成する方法は?

複数のファイルのヘッダーごとに列を切り捨てるcsvcutスクリプトを作成する方法は?

以来csvcutcsvkit)一度に複数のファイルを使用せずに複数のファイルを処理するために使用するには、スクリプトを作成する必要があります。

最初のパラメーターは区切り文字、2番目のパラメーターは抽出する列のヘッダー、残りのパラメーターはファイル名です。

ファイル名が欠落している場合、スクリプトは標準入力になければなりません。

これをする必要があります

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"

スクリプトは複数のパラメータを使用します。 1つ目は区切り文字、2つ目は抽出する列の名前または番号です(カンマ区切りリストを使用できます)。残りのパラメーターは、処理するファイル名として使用されます。

もしただ2 つの引数が与えられると、標準入力が処理用データとして使用されます。

この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

関連情報