Scripting

如何編寫一個 csvcut 腳本來逐列切割多個文件的標題?

  • August 12, 2019

由於csvcut(from csvkit) 一次不會佔用一個以上的文件,因此我需要編寫一個腳本來使用它來處理多個文件。

第一個參數應該是分隔符,第二個參數應該是要提取的列的標題,其餘參數是文件名。

如果文件名失去,腳本應該是標準輸入。

它應該是這樣的

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

引用自:https://unix.stackexchange.com/questions/535127