AWK - 请求澄清示例

时间:2012-10-10 16:04:54

标签: awk gsub

我有3个使用gsub的例子:

1

echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$1); print $1 "\t" $2}' 
    A
B   B
    C

2

$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$2); print $1 "\t" $2}'
A   
B   B
C   

第3

$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'



.

为什么在3例awk中没有打印出来? awk不应该打印吗?:

B   B

请解释3个例子。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

关键是我:$(!/B/)。很尴尬。这是什么意思(或者至少我猜它意味着什么)?

  • / B / :它会尝试匹配整行中的字母B。如果匹配则返回1,否则返回0
  • :取消之前的结果代码。
  • $():在解析之前的说明后,它会返回整行($0)或第一个字段($1)。

第三种情况还可以。

  • B与指令匹配时gsub( $0, "", $0 )为空行。这很清楚。
  • B不匹配时,指令为gsub( $1, "", $0 )。因此,由于两个字母相同且gsub逐行替换多次,因此会删除所有字符。添加另一个不同的角色,你会看到差异。

例如:

echo -e "A A 1\nB B 1\nC C 1" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'

产量:

1

1