给定一个包含内容的文件input.txt
:
xyMnZnMs76XHgsWJ
size: YN3hxFqFeUxXUMrQ
USPqYEnbquwFhUW7
vhJJduHZu25qHzTw
size: JaTDhQYQtLRWBLjj
uE5HGDAZN6DHU73Q
QxVPfQQaKTgR9LXQ
grnsm8bwSz5fJbQS size:
7CcuZxCHSJYhcdqg
ZuWadAaLWFwDwj5Z
Run Code Online (Sandbox Code Playgroud)
如何使用if (condition) {...} else {...}
?
我尝试使用:
xyMnZnMs76XHgsWJ
size: YN3hxFqFeUxXUMrQ
USPqYEnbquwFhUW7
vhJJduHZu25qHzTw
size: JaTDhQYQtLRWBLjj
uE5HGDAZN6DHU73Q
QxVPfQQaKTgR9LXQ
grnsm8bwSz5fJbQS size:
7CcuZxCHSJYhcdqg
ZuWadAaLWFwDwj5Z
Run Code Online (Sandbox Code Playgroud)
但所有行都匹配(即使是不$1
包含 的行"size"
):
match: xyMnZnMs76XHgsWJ
match: size: YN3hxFqFeUxXUMrQ
match: USPqYEnbquwFhUW7
match: vhJJduHZu25qHzTw
match: size: JaTDhQYQtLRWBLjj
match: uE5HGDAZN6DHU73Q
match: QxVPfQQaKTgR9LXQ
match: grnsm8bwSz5fJbQS size:
match: 7CcuZxCHSJYhcdqg
match: ZuWadAaLWFwDwj5Z
Run Code Online (Sandbox Code Playgroud)
我期望输出是:
non-match: xyMnZnMs76XHgsWJ
match: size: YN3hxFqFeUxXUMrQ
non-match: USPqYEnbquwFhUW7
non-match: vhJJduHZu25qHzTw
match: size: JaTDhQYQtLRWBLjj
non-match: uE5HGDAZN6DHU73Q
non-match: QxVPfQQaKTgR9LXQ
non-match: grnsm8bwSz5fJbQS size:
non-match: 7CcuZxCHSJYhcdqg
non-match: ZuWadAaLWFwDwj5Z
Run Code Online (Sandbox Code Playgroud)
roa*_*ima 13
让我们解释一下。
\n的语法结构为awk
\xc2\xab模式 {
操作 }
\xc2\xbb,其中任一组件(但不能同时使用)是可选的。当您编写时,IF ($1 ~ /size/) { print "match: "$0; }
您没有使用if
关键字,而是实际上连接了一个空字符串(未设置的变量IF
)和一个$1 ~ /size/
计算结果为0
or 的表达式 () 1
。由于字符串连接,结果被视为字符串(“ 0
”或“ 1
”),并且如果其长度非零则为“true”。任一结果都有长度,因此模式条件被视为无条件为真。此时{
动作 }
被触发并且你被print "match: "$0
执行。
让我们修复一下。
\n阅读文档awk
(请参阅参考资料man awk
),您会发现if
\xe2\x80\xa6else
结构是小写的。{
此外,除了每个语句的 \xc2\xab操作 \xc2\xbb 部分之外,您不能使用这样的结构}
。
awk -F: '\n { if ($1 ~ /size/) { print "match:", $0 } else { print "non-match:", $0 } }\n' input.txt\n
Run Code Online (Sandbox Code Playgroud)\n但是,请注意,您的行在grnsm8bwSz5fJbQS size:
所需的输出中被视为不匹配,但在此代码中,它被视为匹配的输出。这是因为正则表达式/size/
匹配第一个冒号分隔的字段grnsm8bwSz5fJbQS size
。您需要识别字符串的开头和结尾以进行精确匹配 - 但更好的方法是将其作为文字字符串进行比较:
awk -F: '\n { if ($1 == "size") { print "match:", $0 } else { print "non-match:", $0 } }\n' input.txt\n
Run Code Online (Sandbox Code Playgroud)\n或者,
\nawk -F: '\n $1 != "size" { print "non-match:", $0 }\n $1 == "size" { print "match:", $0 }\n' input.txt\n
Run Code Online (Sandbox Code Playgroud)\n甚至,
\nawk -F: '\n $1 != "size" { printf "non-" }\n { print "match:", $0 }\n' input.txt\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
630 次 |
最近记录: |