7

41 列を含むCSV ファイル ( usvd.csv ) があります。私の bash スクリプトはヘッダー行を処理して、どの列を印刷するかを調べます。その結果、41 列のうち 26 列を印刷する必要があります。これらは異なる場合があります - CSV 内の列の数、または印刷する必要がある列の数。

印刷する必要がある列数を含む配列は次のとおりです。

${UNIQUE[@]} = 1 2 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 20 21 26 30 35 37 39 40 41

したがって、41 列のうち、上記の列のみを印刷したいので、ファイルごとに異なる可能性があります。

ありがとう!!

4

2 に答える 2

6

私は@devnullのソリューションが好きですが、完全を期すためにawkバージョンを提案します:

$ list=$(echo "${UNIQUE[@]}")
$ awk -vd="$list" 'BEGIN{split(d, a, " ")} {for (i in a) printf "%s ", $(a[i]); printf "\n"}' file
col3 col4 col7 
col3 col4 col7 
col3 col4 col7 

特定のファイルに対して

col1 col2 col3 col4 col5 col6 col7
col1 col2 col3 col4 col5 col6 col7
col1 col2 col3 col4 col5 col6 col7

説明

  • list=$(echo "${UNIQUE[@]}")配列をスペースで区切られたフィールドを持つ文字列に変換します。
  • -vd="$list"として使用するために bash 変数$listを awk に渡しますd
  • BEGIN{split(d, a, " ")}da[1]=field1、a[2]=field2、... となるように、文字列をスペースで分割します。
  • {for (i in a) printf "%s ", $(a[i]); printf "\n"}'ループとプリント。
于 2013-10-24T11:59:51.080 に答える