我想基于多个条件(来自同一个文件)从大文件中提取信息,以及从其他小文件中搜索模式,以下是我使用的脚本:
awk 'BEGIN{FS=OFS="\t"}NR==FNR{a[$0]++;next}$1 in a {print $2,$4,$5}' file2.txt file1.txt >output.txt
现在,我想在同一个awk脚本中使用条件,它只打印第4列元素(ATGC中的任何一个字符)与第5列元素(ATGC中的任何一个字符)匹配的行;该列都在文件1中。
因此,在某种程度上,我想用上面提到的脚本合并以下脚本:
awk '$4 " "==$5{print $2,$4,$5}' file1.txt
以下是file1.txt的表示形式:
SNP Name Sample ID GC Score Allele1 - Forward Allele2 - Forward
ARS-BFGL-BAC-10172 834269752 0.9374 A G
ARS-BFGL-BAC-1020 834269752 0.9568 A A
ARS-BFGL-BAC-10245 834269752 0.7996 C C
ARS-BFGL-BAC-10345 834269752 0.9604 A C
ARS-BFGL-BAC-10365 834269752 0.5296 G G
ARS-BFGL-BAC-10591 834269752 0.4384 A A
ARS-BFGL-BAC-10793 834269752 0.9549 C C
ARS-BFGL-BAC-10867 834269752 0.9400 G G
ARS-BFGL-BAC-10951 834269752 0.5453 T T
enter code here
以下是file2.txt的表示
ARS-BFGL-BAC-10172
ARS-BFGL-BAC-1020
ARS-BFGL-BAC-10245
ARS-BFGL-BAC-10345
ARS-BFGL-BAC-10365
ARS-BFGL-BAC-10591
ARS-BFGL-BAC-10793
ARS-BFGL-BAC-10867
ARS-BFGL-BAC-10951
输出应为:
834269752 A A
834269752 C C
834269752 G G
834269752 A A
834269752 C C
834269752 G G
834269752 T T
答案 0 :(得分:1)
您可以简单地使用布尔逻辑,并且从您的输入文件中看起来您可以通过“正常”输入字段拆分来逃避,这将允许您在比较中摆脱该空间:
awk 'BEGIN{OFS="\t"}
NR==FNR{a[$0]++;next}
($1 in a) && ($4==$5) {print $2,$4,$5}' file2.txt file1.txt > output.txt
例如,这是我的测试file2.txt
:
ARS-BFGL-BAC-1020
ARS-BFGL-BAC-10172
这是上面命令的结果:
834269752 A A