私はこの質問を読んでいました 複数のパターンを選択するためのAwkコード
ユーザーはこれを入力として持っています
------------------------------------------------------------------------
r4544 | n479826 | 2012-08-28 07:12:33 -0400 (Tue, 28 Aug 2012) | 1 line
Changed paths:
M /branches/8.6.0/conf/src/main/config/RTSConfig.xml
CET-402: some text comment
------------------------------------------------------------------------
r4550 | n479826 | 2012-09-04 05:51:29 -0400 (Tue, 04 Sep 2012) | 1 line
Changed paths:
M /branches/8.6.0/conf/src/main/config/RTSConfig.xml
M /branches/8.6.0/conf/src/main/config/base.cfg
M /branches/8.6.0/conf/src/main/config/prod.cfg
M /branches/8.6.0/conf/src/main/config/qa.cfg
M /branches/8.6.0/conf/src/main/config/uat.cfg
CET-438: some text comment
そして彼はこれを出力として望んでいます
r4544 | n479826 | 2012-08-28 07:12:33 | /branches/8.6.0/conf/src/main/config/RTSConfig.xml
r4550 | n479826 | 2012-09-04 05:51:29 | /branches/8.6.0/conf/src/main/config/RTSConfig.xml
r4550 | n479826 | 2012-09-04 05:51:29 | /branches/8.6.0/conf/src/main/config/base.cfg
r4550 | n479826 | 2012-09-04 05:51:29 | /branches/8.6.0/conf/src/main/config/prod.cfg
r4550 | n479826 | 2012-09-04 05:51:29 | /branches/8.6.0/conf/src/main/config/qa.cfg
r4550 | n479826 | 2012-09-04 05:51:29 | /branches/8.6.0/conf/src/main/config/uat.cfg
正解はこれ
awk -F"|" '/^r/{a=$1;b=$2;c=substr($3,0,20)}/^ M/{gsub(/ M /," ");print a"|"b"|"c"|"$0}' your_file
私はそれを完全には理解していませんでした。
今、私はこの部分を手に入れました
/^r/{a=$1;b=$2;c=substr($3,0,20)}/^
しかし、私は第二部を取得しませんでした
M/{gsub(/ M /," ");print a"|"b"|"c"|"$0}
私の問題は
M
最初の意味 2.awk はファイルを 1 行ずつ読み取るため、2 行目、つまり Chngaed パスの値を意味します。その行a =0
にはフィールドセパレーターがないためです。|
- awk が 3 行目に来ると、再び
a,b,c =0
結果$0 = /bracnhes
に a、b、c の古い値が表示されます。
複数行で awk を使用すると混乱する