AWK-澄清请求示例

AWK-澄清请求示例,awk,gsub,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 $ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$2); print $1 "\t" $2}' A B B C $ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),""

我有3个使用gsub的示例:

1.

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



.
2.

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



.
3.

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



.
为什么在3个示例中awk未打印?awk是否不应打印?:

B   B
请解释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

我不明白在gsub正则表达式中使用否定,你希望它做什么,你对此有参考吗,或者你只是想知道如何在
/[^B]/
上拆分?@tripleee,为什么我不能使用gsub正则表达式否定
$(!/B/)
?你能解释一下吗?不,你能解释一下你认为这是什么意思吗?你想实现什么?我只是想知道你是否可以使用这种形式的否定
$(!/B/)
?如果你做不到,为什么?如果它做了你认为它做的事情,那就去做;但也许能解释一下这对我们其他人有什么影响。在我看来,你正在努力完成一些事情,但可能没有按照你期望的方式工作,但如果你不告诉我们你期望的是什么,我们无法帮助你弄清楚。好的,你的电话。谢谢你的解释。我还有这个问题。为什么我不能使用gsub regex否定
$(!/B/)
?你能解释一下吗?@Tedee12345:你想用什么就用什么,但这让人困惑。对于你(或写这篇文章的人)想要实现的目标,一眼就能看出重点并不容易。谢谢你的解释。