Bash에서 CSV 헤더 열과 고유 열 값을 사용하여 파일 작성

Bash에서 CSV 헤더 열과 고유 열 값을 사용하여 파일 작성

데이터베이스로 가져오는 많은 CSV 파일이 있습니다. 테이블을 생성하는 데 도움이 되도록 각 열의 고유 값을 미리 보고 싶습니다. 입력 csv 파일을 받아들이고 텍스트 파일을 출력하는 스크립트를 작성했습니다. 출력 파일에 열 헤더와 고유 값을 쓰고 싶습니다. 제가 달성하지 못한 몇 가지 기준은 다음과 같습니다.

  1. 모두 숫자인 열을 건너뛰고 싶지만 "Unit 7"과 같은 숫자가 포함된 문자열은 허용합니다.
  2. " "와 같은 공백 문자열을 건너뛰고 싶지만 "Unit 7"과 같은 공백이 있는 문자열은 허용하고 싶습니다.
  3. 타임스탬프나 시간 개체 등은 필요하지 않습니다.
#!/usr/bin/env bash
set -o errexit
set -o nounset

main() {

        if [[ $1 -ne *.csv ]] ; then
                echo "$1 is not a csv file"
                exit 1
        elif [[ -z $2 ]] ; then
                echo "Usage: univals <csvfile.csv> <outputfile.txt>"
                exit 1
        else
                header_length=$(head $1 -n 1 | wc -w) 
                headers=( $(head $1 -n 1 | tr '\t' '\n') )
                for ((i=1 ; i < $header_length ; i++)) ; do
# This code facilitates printing unique values on one line: https://stackoverflow.com/questions/19274695/sorting-on-same-line-bash
                        a=( $@ )
                        b=( $(printf "%s " ${a[@]} | cut -f $i $1 | grep -v '[0-9]\|\s' | sort -u) )
                        $(echo "${headers[i-1]}" >> $2)
                        $(printf "%s " ${b[@]} >> $2)
                done
        fi
}
main "$@"

이는 숫자를 건너뛰는 데 도움이 되었지만 분명히 숫자나 공백이 있는 모든 항목에 영향을 미쳤습니다. 어떤 도움/조언이라도 미리 감사드립니다.

여기에서 이 스크립트에 대한 도움을 받았습니다.여기그리고여기.

관련 정보