【发布时间】:2015-01-18 11:37:31
【问题描述】:
我想根据多个条件(来自同一个文件)以及从其他小文件中的模式搜索从大文件中提取信息,以下是我使用的脚本:
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
【问题讨论】:
-
您想将
$4 " "==$5与$1 in a结合起来,并且只在两者都为真时运行{print $2,$4,$5}? -
是的,这正是我想做的!
-
&&是合乎逻辑的并且在 awk 中并且可以在模式中使用。 (awk 语法是pattern {action}。)括号也适用于分组和清晰。这对你有帮助吗? -
我还以各种可能的方式使用了“&&”和其他布尔值,但它不起作用
-
请举一些你的 col4 和 col5 的例子,并解释哪个应该被评估为
true应该是false