在awk中使用多个条件
我想根据多个条件(来自同一个文件)从一个大文件中提取信息,并从其他小文件中进行模式搜索,以下是我使用的脚本:在awk中使用多个条件,awk,multiple-conditions,Awk,Multiple Conditions,我想根据多个条件(来自同一个文件)从一个大文件中提取信息,并从其他小文件中进行模式搜索,以下是我使用的脚本: 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 '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
您可以简单地使用布尔逻辑,从您的输入文件来看,您似乎可以通过“正常”输入字段拆分来解决问题,这将允许您在比较中消除该空间:
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
你想将
$4”“==$5
与$1组合在一个中,并且只在它们都为真时运行{print$2,$4,$5}
吗?是的,这正是我想要做的<代码>&&
在awk中是逻辑的,可以在模式中使用。(awk语法是模式{action}
)括号也用于分组和清晰。这有助于你解决这个问题吗?我也尽可能使用了“&&”和其他布尔值,但它不起作用。请举例说明你的col4和col5,并解释哪些值应该被评估为true
,哪些值应该是false
我已经尽可能使用了布尔值,但它不起作用。你说什么意思“它不起作用了"? 您是否收到错误,是否收到意外输出?很抱歉,它会生成一个空白文件,如果我分别使用这两个命令,那么它将正常工作,但只有在将第一个命令的输出文件中的所有内容复制到新文件后,然后分别运行第二个命令如果您编辑您的问题以准确显示您的工作流程,包括head file1.txt
和head file2.txt
的输出,那么这将非常有用。如果你使用第一个命令的输出作为第二个命令的输入,我不明白你怎么还有足够的列。我无法上传文件的打印屏幕截图,因为我的声誉不足10(这是我的第一个问题),并且我无法以适当的方式在这个论坛上发布“head file1.txt”的结果(当我将文件复制到论坛时,文件的制表符分隔表示会受到干扰),您能帮我吗?