我有一个这样的文本文件:
VAREAKAVVLRDRKSTRLN 2888
ACP*VRWPIYTACGP 292
RDRKSTRLNSSHVVTSRMP 114
VAREA*KAVVLRDRRAHV*T 73
在某些行的第一列中有一个“*
”。我想删除带有“*
”的所有行。这是预期的输出:
预期输出:
VAREAKAVVLRDRKSTRLN 2888
RDRKSTRLNSSHVVTSRMP 114
为此,我使用了这段代码:
awk -F "\t" '{ if(($1 == '*')) { print $1 "," $2} }' infile.txt > outfile.txt
这段代码没有返回预期的输出。我该如何解决?
最佳答案
我该如何解决?
你做到了
awk -F "\t" '{ if(($1 == '*')) { print $1 "," $2} }' infile.txt > outfile.txt
通过执行 $1 == "*"
你是在问:是第一个字段 *
not does first contain *
?您可以使用 index如果找到则返回匹配位置的函数,否则返回 0。让infile.txt
内容为
VAREAKAVVLRDRKSTRLN 2888
ACP*VRWPIYTACGP 292
RDRKSTRLNSSHVVTSRMP 114
VAREA*KAVVLRDRRAHV*T 73
然后
awk 'index($1,"*")==0{print $1,$2}' infile.txt
输出
VAREAKAVVLRDRKSTRLN 2888
RDRKSTRLNSSHVVTSRMP 114
请注意,如果您使用 index
而不是模式 /
.../
则不必关心具有特殊含义的字符,例如.
。请注意,对于您拥有的数据,您不必明确设置字段分隔符 (FS
)。 重要 '
在 GNU AWK
中不是合法的字符串分隔符,您应该为此目的使用 "
,除非您有意就是召唤难找的 bug 。
(在 gawk 4.2.1 中测试)
关于awk - 在 awk 中删除带有特殊字符的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69387272/