2017-11-17 12 views
0

あるかどうかをチェックし、私は次のコードスニペットシェル:すべての出力文字列が同じ

$ mount | grep '^/dev'| awk '{print $1}' 
/dev/disk1s1 
/dev/disk1s4 

を持っている今、私は、出力ラインが同じ値または異なるを持っているかどうかを確認する必要があります。 したがって、上記の場合は異なります。 [disk1s1とdisk1s4]。どのようにこれをシェルで達成できるか。

私は結果に2つ以上の行があるかもしれません。

+0

'awk'を使って、' grep'でできることはほとんどできます。だから、 'grep'と一緒に' awk'が過剰です。また、あなたの結果はどうでしょうか。それは 'same'または' different'の単なる行ですか? – sjsam

答えて

1

テストし、何か好きではない:

if (($(mount | grep -o '^/dev[^ ]*' | sort -u | wc -l) > 1)) 
then 
    echo different values 
fi 

若干変更したパターンと一緒のgrepで-oオプションは、最初のフィールドだけを返します。 sortの-uオプションは重複をスローします。

4

あなたが任意の重複の結果を得た場合、出力は「同じ」

$ mount | awk '/^\/dev/{print $1,a[$1]?"same":"";a[$1]=1}' 
/dev/sdb1 
/dev/sdb3 
/dev/sda1 
/dev/sdb1 same 
/dev/sdb3 same 

簡単な説明、

  • あなたにgrepを使用する必要はありませんと付け加えなり、以下のようにあなたのコマンドを変更してくださいコマンド、原因awkgrepできることを行うことができます。
  • /^\/dev/:中$1を設定することを忘れないでください:[$ 1]そう
  • a[$1]=1何もしない、$1後ろにプリント "同じ"、設定されている場合、検索ラインは '/ devの'
  • a[$1]?"same":""で始まります最終。
+2

うわー!!!この回答のためにありがとう:-) – Allan

+3

@Allan 'awk'は(post/pre)fix演算子をサポートしているので、' mount | awk '/^\/dev/{print $ 1、a [$ 1] ++? "同じ": ""}' ' – sjsam

+2

印象深い!しかし少し読みにくい;-) – Allan

関連する問題