CSV ファイルをデータベースへ登録時のトラブルシューティング

取込ファイル側の不正レコードを効率よく調査したい。

bash バージョン

$ bash --version
GNU bash, version 5.1.16(1)-release (x86_64-pc-linux-gnu)

ファイル内各レコードのフィールド数を集計

行ごとのフィールド数を数えて、その値ごとに件数を集計する。

(echo "count  fields"; \
 awk -F'\t' '{print NF}' file.tsv | sort | uniq -c | awk '{print $1, $2}' ) \
 | column -t

指定フィールド数のレコード行を表示

フィールド数が 10 の行番号と内容を表示。

awk -F'\t' 'NF==10 {print NR, $0}' file.tsv

指定レコード行のフィールド数を表示

1234行目のフィールド数を出力。

sed -n '1234p' file.tsv | awk -F'\t' '{print NF " fields"}'

指定レコード行の不可視文字を表示

sed -n '1234p' file.tsv | od -An -c
sed -n '1234p' file.tsv | cat -A

フィールドごとに値を確認

1234行目を列番号付きで表示。

sed -n '1234p' file.tsv | awk -F'\t' '{for(i=1;i<=NF;i++){print i, $i}}'