我正在阅读这个问题 Awk code to select multiple patterns
用户将此作为输入
------------------------------------------------------------------------
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.Now awk 将逐行读取文件,因此它意味着在第二行,即 Chngaed 路径的值,因为该行上a =0
没有字段分隔符|
- 现在,当 awk 再次进入第三行时
a,b,c =0
,$0 = /bracnhes
结果如何仍然显示 a,b,c 的旧值
在多行上使用 awk 时我感到困惑