各列に数字を含む行数を返します。

各列に数字を含む行数を返します。

この質問に対する回答を試しましたが、特定の要件に合わせて調整することはできませんでした。

https://stackoverflow.com/questions/58005013/count-the-number-of-rows-per-column-in-bash-shell

私の目標は、csvファイルを読み取り、各列の数を返すbashスクリプトを作成することです。数は、ダッシュ、ピリオド、コロンなどの数値を含む行数です。

次のcsvファイルが提供されます。

2012-01-01 12:01:01, 1,3.2,NA,9,P
2012-01-01 12:01:01, 1,3,5,9,P
2012-01-01 12:01:01, 1,Bad,5,9,P
2012-01-01 12:01:01, 1,3,5,9,P
2012-01-01 12:01:01, 1,3,NA,9.7,P

私の結果は次のとおりです。

5,5,4,3,5,0

ベストアンサー1

使用awk:

awk -F, -v OFS=, '
   { gsub(/[:. -]/, ""); for(c=1; c<=NF; c++) if($c==$c+0) count[c]++ }
END{ for(i=1; i<c; i++) printf "%d%s", count[i], (i+1<c?OFS:ORS) }' infnile

出力:

5,5,4,3,5,0

おすすめ記事