grep が複数の項目を探します。

grep が複数の項目を探します。

LDAP 基本ダンプ・ファイルから 6 個程度のエントリーを抽出する必要があります。

fullName:
uid:
email:
...

主に uid はファイルの複数の場所に表示されるため、検索にはコロンが必要ですが、uid: が必要です。私はコロンを避けようとしましたが、私が使用したすべての組み合わせはおそらく最初のクエリを見つけるでしょうが、2番目のクエリは見つかりません。これにより、リストに追加するアイテムが3つ以上あります。

既存の出力:

gw1:~ # cat dump2.txt|awk "/email:/" && "/fullName:/"
-bash: /fullName:/: No such file or directory

gw1:~ # cat dump2.txt|grep -e "email:" -e "fullName:"
fullName: LDAP Proxy2
fullName: Student Email Administrator
fullName: Richard C. Holly
fullName: Jene E. Brown

予想出力:

gw1:~ # cat dump2.txt|awk "/email\:/" print{','} && "/fullName\:/" print{','} && "/gid\:/"
email: [email protected] , fullName: LDAP Proxy2, gui: 987

csv形式を参照してください。

ベストアンサー1

サンプル入力ファイルから始めましょう。

$ cat dump.txt
some: other
email: [email protected]
fullName: LDAP Proxy2
gui: 987
other: thing

必要な行を抽出してCSVでフォーマットを再指定するには、次の手順に従ってください。

$ awk '/email:|fullName:|gui:/{s=s", "$0} END{print substr(s,3)}' dump.txt
email: [email protected], fullName: LDAP Proxy2, gui: 987

仕組み:

  • /email:|fullName:|gui:/{s=s", "$0}

    これは条件の後の文です。条件は、/email:|fullName:|gui:/探している文字列の1つを含む行にのみ適用される正規表現です。正規表現では、この|記号は論理ORを表します。

    条件が true の場合、文が実行されます。このステートメントを使用すると、コンマ、スペース、および現在の行が変数に追加されますs

    awkファイル内のすべての行を暗黙的に繰り返し、各行で上記の操作を実行します。

  • END{print substr(s,3)}

    入力ファイルの読み取りが完了したら、最初の2文字を除くすべての文字を印刷しようとしますs。最初の2文字は「,」で重複しています。この機能はsubstrそれを削除するために使用されます。

サンプル出力

使用あなたが提供した文書paste.eeコメントに指定したフィールド(「mail:」、「fullName」、「uid」)を選択すると、次の結果が表示されます。

$ awk '/mail:|fullName:|uid:/{s=s", "$0} END{print substr(s,3)}' dump.txt
mail: [email protected], uid: pgroce, fullName: Patti K. Groce

すべてのフィールドが見つかりました。

空のフィールドを入力してください

コメントに従って、dump3.txt最後に空の項目を置くことを検討してください。

$ cat dump3.txt
other: thing
mail: [email protected]
uid: pgroce
fullName: Patti K. Groce
mail:
mail:
Other: Thing
mail:
$ awk '/mail:|fullName:|uid:/{s=s", "$0} END{print substr(s,3)}' dump3.txt
mail: [email protected], uid: pgroce, fullName: Patti K. Groce, mail:, mail:, mail:

お客様の要件に応じて、空のアイテムは空のアイテムとして印刷されます。

おすすめ記事