Luk*_*cme 5 regex awk compare match multiple-columns
我正在尝试比较文件1的列1和文件2的列3,如果它们匹配,则打印文件1的第一列和文件2的第二列。
这是每个文件的样本:
文件1
Cre01.g000100
Cre01.g000500
Cre01.g000650
Run Code Online (Sandbox Code Playgroud)
文件2
chromosome_1 71569 |655|Cre01.g000500|protein_coding|CODING|PAC:26902937|1|1)
chromosome_1 93952 |765|Cre01.g000650|protein_coding|CODING|PAC:26903448|11|1)
chromosome_1 99034 |1027|Cre01.g000100 |protein_coding|CODING|PAC:26903318|9|1)
Run Code Online (Sandbox Code Playgroud)
期望的输出
Cre01.g000100 chromosome_1 99034
Cre01.g000500 chromosome_1 71569
Cre01.g000650 chromosome_1 93952
Run Code Online (Sandbox Code Playgroud)
我一直在研究各种相似的线程,但是似乎无法从两个文件中打印列。以下是一些相关的链接:
awk比较2个文件,文件中2个字段的顺序不同,打印或合并匹配行和不匹配行
从文件获取模式,与另一个文件的列进行比较,使用awk打印匹配的行
使用ack或awk或比grep更好的方法从另一个文件中获取模式?
AWK-结合2个文件中的数据并在键匹配的情况下打印到第3个文件
我觉得我应该能够根据这些线程来解决这个问题,但是经过两天的时间,我一直在尝试各种不同的代码版本,但是我什么都没得到。这是我尝试在文件上使用的一些代码:
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
Run Code Online (Sandbox Code Playgroud)
我知道我必须创建一个临时矩阵,其中包含file1的第一列(或file2的第三列),然后将其与另一个文件进行比较。如果有匹配项,则从文件1打印第一列,从文件2打印第一列和第二列。
谢谢您的帮助!
你可以使用这个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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6352 次 |
| 最近记录: |