bash +各行のすべての単語数が同じであることを確認する方法

bash +各行のすべての単語数が同じであることを確認する方法

各行のすべての単語/文字列の数が同じであることを確認する方法

各行のすべての単語数が等しい場合、文法はtrueを返し、計算された単語数

行数が異なる場合、構文はfalseを返し、count = NAを返します。

たとえば、次の例では次のようになります。本物そして個数=5

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf sdd
sde sdb sdd sdc sdf
sdc sde sdd sdb sdf

次の例に関連して、我々は得るでしょう間違ったそして個数=NA

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf 
sde sdb sdd sdc sdf
sde sdd sdb sdf

次の例の別の例に関連して、間違ったそして個数=NA

sdb sde sdc sdf sdd
sdc sdb sde sdd sdf
sdb sdc sde sdf 
sde sdb sdd sdc sdf
sde sdd sdb sdf sde 

ベストアンサー1

使用awk:

awk 'BEGIN { r = "true" } NR == 1 { n = NF; next } NF != n { r = "false"; n = "N/A"; exit } END { printf("status=%s count=%s\n", r, n) }' somefilename

またはawkスクリプトとして:

#!/usr/bin/awk -f

BEGIN { r = "true" }

NR == 1 { n = NF; next }
NF != n { r = "false"; n = "N/A"; exit }

END { printf("status=%s count=%s\n", r, n) }

スクリプトはr「結果」と同じ設定で始まりますtrue(偽ではなく真であると仮定します)。その後、n最初の行のフィールド数で初期化されます(「数字」)。

入力データの他の行に異なる数のフィールドがある場合は、次のように設定され、rスクリプトがfalse終了します(ブロックを介してn)。N/AEND

最後に、rsumの現在の値を印刷します。n


このスクリプトの出力は次のようになります。

status=true count=5

または

status=false count=N/A

これはor export、またはで使用できます。bashdeclareeval

declare $( awk '...' somefilename )

これにより、シェル変数が作成され、count呼び出しstatusシェルで使用できます。

おすすめ記事