ファイルがタブで区切られ、8つの列があるかどうかを確認するには?

ファイルがタブで区切られ、8つの列があるかどうかを確認するには?

テキストファイルで2つのことを確認する必要があります。

  1. タブで区切られた場合
  2. 正確に8つの列がある場合

これを確認し、そのうちの1つが偽である場合は、エラーメッセージを表示するにはどうすればよいですか?

答え1

1つの解決策はawkを使用することです。

awk -F "\t" 'NF != 8' data.txt

このコマンドは、8つのフィールドを含まないdata.txtファイルの対応する行を印刷します。

答え2

次のようにPerl onelinerを使用できます。

perl -ne '(s/\t//go)==7 or die "Not tabdelimitedand 8-columned"' t.txt

ファイルが一致しない場合は、エラーメッセージで終了します。追加 (bash) スクリプトを許可します。

if perl -ne '(s/\t//go)==7 or exit -1' t.txt
then
    echo correct format
else
    echo unexpected format
fi

答え3

ct=($(sed -re 's/[^\t]//g' "$file" | expand -t1 | wc -l -c -L))

if (( ((ct[0] * 8) == ct[1]) && (ct[2] == 7) )) ;then
    echo "file contains 8 tab-delimited fields on every line"
else 
    if (( ct[1] == ct[0] )) ;then
        echo "file does not contain any tab-delimiters"
    else
        echo "file contains tabs, but does not have 8 fields on every line"
    fi
fi

関連情報