200,000 を超えるレコードを含むファイル 'records.txt' があります。
各レコードは別々の行にあり、区切り文字「|」で区切られた複数のフィールドがあります。
各行には 35 個のフィールドが必要ですが、問題はこれらの行の 1 つに <>35 フィールド、つまり <>35 '|' があることです。文字。
誰かが Unix で行を特定できる方法を提案してくれませんか。(ファイル内の各行の「|」文字数を取得するのと同様)
これを試して:
awk -F '|' 'NF != 35 {print NR, $0} ' your_filefile
そこにいるbashの友達のために、bashのものを使ったグレッグのやり方:)
while read n; do [ `echo $n | tr -cd '|' | wc -c` != 35 ] && echo $n; done < records.txt
次の小さな perl スクリプトで実行できます。
cat records.txt | perl -ne '$t = $_; $t =~ s/[^\|]//g; print unless length($t) == 35;'
これは、|以外のすべての文字を削除し、残っているものをカウントすることで機能します。