文件:
chromosome position ref alt
chr1 1398 A T
chr1 2980 A C
chr2 3323 C T,A
chr2 3749 T G
chr3 5251 C T,G
chr3 9990 G C,T
chr4 10345 T G
Run Code Online (Sandbox Code Playgroud)
当第 4 列有 2 个或更多字符以逗号分隔时,我需要提取整行
预期输出为:
chr2 3323 C T,A
chr3 5251 C T,G
chr3 9990 G C,T
Run Code Online (Sandbox Code Playgroud)
看待这个问题的其他几种方式。
由于您只对由逗号分隔的 2 个以上字符的行感兴趣,因此您可以只grep
使用逗号:
$ grep "," sample.txt
chr2 3323 C T,A
chr3 5251 C T,G
chr3 9990 G C,T
Run Code Online (Sandbox Code Playgroud)
您可以使用grep
's PCRE 工具。这是grep
可以使用 Perl 的正则表达式引擎进行匹配的地方。它非常强大,可以让您从grep
.
松散定义
$ grep -P "(\w,)+" sample.txt
Run Code Online (Sandbox Code Playgroud)
严格定义
$ grep -P '\w+\d\s+\d+\s+\w\s+(\w,)+' sample.txt
Run Code Online (Sandbox Code Playgroud)
使用awk
. 这再次利用了这样一个事实,即只有带逗号 ( ,
) 的行才有意义,因此它只是找到它们并打印它们:
松散定义
$ awk '/,/{print}' sample.txt
Run Code Online (Sandbox Code Playgroud)
更严格的定义
$ awk '/([[:alpha:]])+,[[:alpha:]]/{print}' sample.txt
Run Code Online (Sandbox Code Playgroud)
更严格的定义
$ awk '$4 ~ /([[:alpha:]])+,[[:alpha:]]/{print}' sample.txt
Run Code Online (Sandbox Code Playgroud)
这个查看第 4 列的内容并检查它是一个字母后跟一个逗号,后跟另一个字母。
更严格的定义
$ awk '$4 ~ /([GATC])+,[GATC]/{print}' sample.txt
Run Code Online (Sandbox Code Playgroud)
这仅查找 G、A、T 或 C 后跟逗号,后跟另一个 G、A、T 或 C。