Scripting
如何編寫一個 csvcut 腳本來逐列切割多個文件的標題?
由於
csvcut
(fromcsvkit
) 一次不會佔用一個以上的文件,因此我需要編寫一個腳本來使用它來處理多個文件。第一個參數應該是分隔符,第二個參數應該是要提取的列的標題,其餘參數是文件名。
如果文件名失去,腳本應該是標準輸入。
它應該是這樣的
csvcut ';' Measure calories.csv
我不是很熟悉
csvkit
。任何人都可以幫忙嗎?
假設您要處理的所有 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