여러 파일의 헤더별로 열을 자르는 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

관련 정보