我想从awk返回带有模式“ C”或“。,C”或“。,C,。*”的行。 例如:
C,G
G,C
G,C,A
G,CC
我的代码如下:
echo G,CC | awk '$0 ~ /^C,+.*|.*,C,*.*/ {print $0}'
G,CC
我希望它对我没有任何帮助。不幸的是,它向我返回了“ G,CC”。
我该如何解决这个问题?
基于@Emma和@perreal的答案。我使用了较短的命令行来解决我的问题:
awk '$0 ~ /^C,.*|.*,C,.*|.*,C$/ {print $0}'
直到现在,它都运行良好。谢谢您的帮助!
答案 0 :(得分:3)
+
在^C,+.*
中不是必需的,因为您已经匹配了逗号并且也匹配了之后的内容。
第二个逗号后的*
在.*,C,*.*
中不正确。它使逗号成为可选,因此它也可以匹配G,CC
(.*,
匹配G,
和C,*
匹配CC
)。
这应该有效:
awk '$0 ~ /^[GCA](,[GCA])*$/ && /C/ {print $0}'
答案 1 :(得分:3)
请您尝试以下。
awk '!/CC/ && /^C,+.*|.*,C,*.*/' Input_file
答案 2 :(得分:2)
$ awk '/(^|,)C(,|$)/' file
C,G
G,C
G,C,A
答案 3 :(得分:1)
我的猜测是也许这也行得通
awk '$0 ~ /^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/ {print $0}'
Mr. Rankin建议:
它等效于
awk '/^([A-Z],C,[A-Z]|[A-Z],C|C,[A-Z])$/'
。输出量 与print一起是默认操作,并且与 记录。
答案 4 :(得分:1)
换句话说,您要选择以“ C”作为单词的行吗?如果是,这里有两种解决方案:
grep -w C
grep -E '\<C\>'
第一个建议grep仅匹配整个单词。第二行使用开始词和结束词模式。这些模式也可以与awk一起使用:
awk '/\<C\>/ {print}'
一个完整的不同解决方案(以及其他答案的形式也不同)是在比较,C,
之前在两端添加逗号:
awk '"," $0 "," ~ /,C,/ {print}