解析後に他の列の内容を失うことなく特定の列やデータを解析する方法は?

解析後に他の列の内容を失うことなく特定の列やデータを解析する方法は?

元の質問と編集されたテキスト:この例では、「225」の値をgrepするために、次の出力があります。値は動的であるため、入力に応じて変更される可能性があります。」しかし、行全体の内容を失うことなく、列4の一致パターンのみに基づいて値225を使用して行全体を取得したいと思います。

Input:
10.20.223.10|2000-H1|1/1/2|DeviceX_4021|LG
10.20.223.10|2000-H1|1/1/3|Undiscoverable|Unkwn
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

Desired Output
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

The following output its not desired:
10.20.225.10|2000-H1|1/1/5|DeviceZ_2050|LG
10.20.223.10|2000-H1|1/1/8|DeviceY_225_|Kenmore

awkとgrepをたくさん試しましたが、成功しませんでした。列1、行3の値は225なので、対応する出力は必要ありません。 「225」に一致する列4のすべての項目が必要です。これで、ファイルはスペースなしでパイプで区切られます。

答え1

使用awk:

awk -F'|' '$4 ~ /[^0-9]225[^0-9]/' file

これは225、4番目のフィールドで一致し、一致する値(1225または2256)の前後に数字のないレコードを印刷します。

答え2

あなたのデータはawk形式に適しているようです。

$ awk '$8 == "225)"' INPUT
10.20.225.207        Device #1            1/1/23  Brand #2 (MODEL: 225)         LG
10.20.209.252        Device #2            1/1/36  Brand #2 (MODEL: 225)         LG

awkはデフォルトで列をスペースで区切っているので、列8を使用します。

答え3

これがあなたに役立つことを願っています:

grep 'MODEL: 225)' input-file

225の前には常に付いていると仮定しますMODEL:

答え4

Perlとsedを使って解決策を見つけました。これを達成するためにawkを使用できればいいでしょう。

ソリューション A Dave Crossに感謝します。

  • perl -aF '|' -ne '$F[3] =~ 225 と印刷' < 入力

解決策B John Bollingerに感謝します。

  • sed -n '/^([^|]*|){3}[^|]*225/p' < 入力

関連情報