テキストファイルの各列の行数の計算

テキストファイルの各列の行数の計算

次の形式のテキストファイルがあります。

5 3 1
2 3 4
.....
.....
つまり、空白で区切られた 3 つの数値列/ ただし、一部の行は次のように見える場合があります。
2
3 1
したがって、テキストファイルにそのような矛盾があるかどうかを検出したいと思います。そしてそれを印刷してください。どうすればいいですか?

答え1

Stephen Chazerasが提案した

awk 'NF != 3'

3つの列を含まないすべての行を印刷する簡単な方法は次のとおりです。その行が見つかった場合にコマンドに障害状態を返すには、次のようにします。

awk 'NF != 3 {print; ++bad} END {exit(!!bad)}'

何も印刷したくない場合は、削除して終了print;ステータスを介してそのような行の存在を報告してください。

grepを使用してこれを行うこともできます。

grep -Ev '^[^ ]+ +[^ ]+ +[^ ]+$'

より厳密に、各列に整数を含む正確に3つの列で構成されていないすべての行を印刷するには、次の手順を実行します。

grep -Ev '^([0-9]+) +([0-9]+) +([0-9]+)$'

1つ以上のタブ文字を列区切り文字として許可するには、whereの代わりに[␉ ]+tabを使用します +。正確に1つのタブ文字または一連のスペースを許可するために使用されます。(␉| +)

答え2

本当に欲しいものが質問タイトルの質問である場合、このawkコマンドは行番号と各行のフィールド数を印刷します。

awk '{print NR,NF}'

答え3

awk '{if(NF != 3) print NR,NF}' file.txt

これにより、3つのフィールドがないファイルの行番号とそのフィールドの数が印刷されます。

関連情報