列に存在しない値の数を見つける方法

列に存在しない値の数を見つける方法

1列に存在しない値がいくつあるか、つまり「.」が1つしかないかどうかを調べる方法を見つけようとしました。

例えば

車.txt

Car           Colour      mpg          Year
vw_golf         blue       56          2006
vw_polo          red       66          2010
honda_civic    white       .           2007
ford_ka          red       .           2014

だから私が興味を持っているのはHonda CivicとFord kaです。 mpg列に数字がないので、mpg列にmpg列に数字がない値がいくつあるか知りたいです。値(この場合は2)です。

私が経験している問題は、awkコマンドを使用するとエラーが発生しているようです。

答え1

短いgrep方法:

grep -Ec '^\S+\s+\S+\s+\.\s+' file
2

  • -E- 拡張正規表現を許可
  • -c- 一致する行の数を印刷します。
  • \S+- 同義語である空白以外の文字と一致します。[^[:space:]]
  • \s+- 同義語である空白文字と一致します。[[:space:]]

答え2

別のgrep方法として、ファイル形式が列28からmpgに厳密に指定されている場合:

$ grep '...........................\.' input
honda_civic    white       .           2007
ford_ka          red       .           2014

$ grep -c '...........................\.' input
2

これは、28のピリオド(「すべて」の文字の場合)とエスケープされたピリオド(「ピリオド」)の後に続くものです。

またはawk〜のように 言及するコメントから:

$ awk '$3 == "."' input
honda_civic    white       .           2007
ford_ka          red       .           2014

$ awk '$3 == "."' input | wc -l
2

関連情報