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

这帮助我跳过了数字,但显然对其中包含数字或空格的所有内容都造成了影响。预先感谢您的任何帮助/建议。

我从这里得到了这个脚本的一些帮助这里这里

相关内容