Regex awk搜索一个文件中的列,如果匹配两个文件中的打印列
我试图比较文件1中的第1列和文件2中的第3列,如果它们匹配,则打印文件1中的第一列和文件2中的前两列 以下是每个文件的示例: 文件1 文件2 期望输出Regex awk搜索一个文件中的列,如果匹配两个文件中的打印列,regex,awk,compare,match,multiple-columns,Regex,Awk,Compare,Match,Multiple Columns,我试图比较文件1中的第1列和文件2中的第3列,如果它们匹配,则打印文件1中的第一列和文件2中的前两列 以下是每个文件的示例: 文件1 文件2 期望输出 Cre01.g000100 chromosome_1 99034 Cre01.g000500 chromosome_1 71569 Cre01.g000650 chromosome_1 93952 我一直在寻找一些相似的线程,但我似乎无法让它打印两个文件中的列。以下是一些相关的链接: 我觉
Cre01.g000100 chromosome_1 99034
Cre01.g000500 chromosome_1 71569
Cre01.g000650 chromosome_1 93952
我一直在寻找一些相似的线程,但我似乎无法让它打印两个文件中的列。以下是一些相关的链接:
我觉得我应该能够根据这些线程来解决这个问题,但已经两天了,我一直在尝试不同的代码变体,但我什么也没得到。
以下是我在文件中尝试使用的一些代码:
awk 'FNR==NR{a[$3]=$1;next;}{print $0 ($3 in a ? a[$3]:"NA")}' file1 file2
awk 'NR==FNR{ a[$1]; next} ($3 in a) {print $1 $2 a[$1]}' file1 file2
awk 'FNR==NR{a[$1]=$0; next}{print a[$1] $0}' file1 file2
我知道我必须创建一个临时矩阵,其中包含file1的第一列(或file2的第三列),然后将其与另一个文件进行比较。如果存在匹配项,则打印文件1的第一列以及文件2的第1列和第2列
谢谢你的帮助 这三次尝试中,你的中间尝试最接近,但是:
- 您尚未指定字段分隔符为
|
- 您没有分配给
一个[$1]
- 示例输出与所需输出不一致(示例输出显示文件1中的第1列和文件2中的第1列;所需输出据说是文件1中的第1列和文件2中的第1列和第2列,尽管此解释取决于文件2中的
是两个管道符号之间的名称的解释) 引用创建此答案时的问题: …比较文件1中的第1列和文件2中的第3列,如果它们匹配,则打印文件1中的第一列和文件2中的前两列$3
desired output Cre01.g000100 chromosome_1 99034 Cre01.g000500 chromosome_1 71569 Cre01.g000650 chromosome_1 93952
- 我们可以观察到,如果文件2中的
等于文件1中的值,那么打印$3
与打印保存的值一样容易$3
awk -F'|' 'NR==FNR { a[$1]=1; next } ($3 in a) { print $3, $1 }' file1 file2
关键的变化是分配给
a[$1]
(以及-F'|'
);其余的是修饰性的,可以根据您的要求进行调整(因为问题本身不一致,很难给出更好的答案)。您可以使用此awk
:
awk -F '[| ]+' -v OFS='\t' 'NR==FNR{a[$4]=$1 OFS $2; next}
$1 in a{print $1, a[$1]}' file2 file1
Cre01.g000100 chromosome_1 99034
Cre01.g000500 chromosome_1 71569
Cre01.g000650 chromosome_1 93952
awk -F'|' 'NR==FNR { a[$1]=1; next } ($3 in a) { print $3, $1 }' file1 file2
awk -F '[| ]+' -v OFS='\t' 'NR==FNR{a[$4]=$1 OFS $2; next}
$1 in a{print $1, a[$1]}' file2 file1
Cre01.g000100 chromosome_1 99034
Cre01.g000500 chromosome_1 71569
Cre01.g000650 chromosome_1 93952