Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Awkマルチラインマージ【次回使用紹介】(共通アプリ4)

Awkマルチラインマージ【次回使用紹介】(共通アプリ4)

  
 

awkするとテキスト処理が発生する可能性があります。複数行を1行にまとめて問題を表示してください。内部のSQLに少し似ていますが、行ルーティングの問題がしばしば発生しました。ここで次の文を使う必要があります。


Awknextステートメントでは、ループマッチングで1行ずつ一致しますが、次に遭遇した場合、現在の行をスキップし、次のステートメントを直接無視します。そして次の行が一致します。

text.txt内容は次のとおりです。

abcde


[chengmo @ centos5シェル] $ awk 'NR%2 == 1 {next} { Print NR、$ 0;} 'text.txt 2 b4 d

レコード行番号を2以上の1で割った場合、現在の行はスキップされます。次の印刷NR、$ 0は実行されません。次の行が始まり、プログラムはNR%2値の決定を始めます。この時点で、レコード行番号は2で、次のステートメントブロックが実行されます。 'print NR、$ 0'



awk next use case:

要件:

ファイル:text.txtフォーマット:web01 [192.168.2.100]

httpd oktomcat oksendmail okweb02 [192.168.2.101] httpd okpostfix okweb03 [192.168.2.102] mysqld okhttpd ok


出力フォーマットは、awkで変更する必要があります。

web01 [192.168.2.100]:httpd okweb01 [192.168.2.100]:tomcat okweb01 [192.168.2.100]:sendmail okweb02 [192.168.2.101]:httpd okweb02 [192.168.2.101]:後置okweb03 [192.168.2.102]:mysqld okweb03 [192.168.2.102]:httpd ok


分析:
<分析の結果、< web>を含む行をスキップしてから、次の行を含むコンテンツを1行に結合する必要があることがわかりました。

[chengmo @ centos5シェル] $ awk '/^ web /{T = $ 0; next;} {print T":\\ t" $ 0;}' test.txt

web01 [ ,null,null,3],192.168.2.100]:httpd okweb01 [192.168.2.100]:tomcat okweb01 [192.168.2.100]:sendmail okweb02 [192.168.2.101]:httpd okweb02 [192.168.2.101]:ポストフィックスokweb03 [192.168.2.102]:mysqld okweb03 [192.168] 2.102]:httpd ok


nextは、複数行のマージと選択出力に非常に便利です。あなたがそれを使うとき、あなたはそれを試したいと思うかもしれません。

Copyright © Windowsの知識 All Rights Reserved