元の質問と編集されたテキスト:この例では、「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' < 入力