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 "$@"

これは数字をスキップするのに役立ちましたが、明らかに数字やスペースを含むすべての項目に影響を与えました。どんな助け/アドバイスも事前に感謝します。

ここでこのスクリプトの助けを受けました。ここそしてここ

ベストアンサー1

おすすめ記事