5

200,000 を超えるレコードを含むファイル 'records.txt' があります。

各レコードは別々の行にあり、区切り文字「|」で区切られた複数のフィールドがあります。

各行には 35 個のフィールドが必要ですが、問題はこれらの行の 1 つに <>35 フィールド、つまり <>35 '|' があることです。文字。

誰かが Unix で行を特定できる方法を提案してくれませんか。(ファイル内の各行の「|」文字数を取得するのと同様)

4

3 に答える 3

12

これを試して:

awk -F '|'  'NF != 35 {print NR, $0} ' your_filefile
于 2009-01-14T10:07:56.113 に答える
1

そこにいるbashの友達のために、bashのものを使ったグレッグのやり方:)

while read n; do [ `echo $n | tr -cd '|' | wc -c` != 35 ] && echo $n; done < records.txt
于 2009-01-14T11:05:03.910 に答える
1

次の小さな perl スクリプトで実行できます。

cat records.txt | perl -ne '$t = $_; $t =~ s/[^\|]//g; print unless length($t) == 35;'

これは、|以外のすべての文字を削除し、残っているものをカウントすることで機能します。

于 2009-01-14T10:03:02.787 に答える