我有两个文件,File1和File2。 File1有6000行,file2有3000行。我想匹配id并根据匹配合并文件,这很简单。但是,file1和file2中的ID仅部分匹配。看看文件。对于file2中的每个id(行),文件1中必须有两个匹配的id(行)。此外,file2中并不存在file2中的所有id。我曾尝试过awk但没有得到所需的输出。
File1中
1_A01_A
1_A01_B
2_B03_A
2_B03_B
1_A02_A
1_A02_B
2_B04_A
2_B04_B
1_A03_A
1_A03_B
2_B05_A
2_B05_B
1_A04_A
1_A04_B
2_B06_A
2_B06_B
1_A06_A
1_A06_B
2_B07_A
2_B07_B
1_A07_A
1_A07_B
2_B08_A
2_B08_B
9_F10_A
9_F10_B
12_D08_A
12_D08_B
5505744243493_F09.CEL_A_A
5505744243493_F09.CEL_B_B
文件2
1_A01 14
2_B03 13
1_A02 4
2_B04 14
1_A03 11
2_B05 8
1_A04 18
2_B06 15
1_A06 10
2_B07 4
1_A07 8
2_B08 22
1_A08 5
2_B09 15
1_A09 20
2_B10 17
答案 0 :(得分:0)
awk -F" " 'FNR==NR{a[$1]=$2;next}{for(i in a){if($1~i){print $1" "a[i];next}}}' file1.txt file2.txt
FNR == NR将在awk读取文件1时为true而在读取文件2时为false。从{for(i in a} ...开始的代码部分将对文件2执行。$ 1~i寻找与条件类似,然后对于相关匹配,输出将被打印。
我错误地使用了不同的文件符号。我的file1.txt包含问题陈述中的file2.txt的内容,反之亦然
<强>输出强>
1_A01_A | 14
1_A01_B | 14
2_B03_A | 13
2_B03_B | 13
1_A02_A | 4
1_A02_B | 4
2_B04_A | 14
2_B04_B | 14
1_A03_A | 11
1_A03_B | 11
2_B05_A | 8
2_B05_B | 8
1_A04_A | 18
1_A04_B | 18
2_B06_A | 15
2_B06_B | 15
1_A06_A | 10
1_A06_B | 10
2_B07_A | 4
2_B07_B | 4
1_A07_A | 8
1_A07_B | 8
2_B08_A | 22
2_B08_B | 22
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed -r 's|^(\S+)(\s+\S+)$|s/^\1.*/\&\2/p|' file2 | sed -nf - file1
这会从file2
创建一个sed脚本,然后针对file1
中的数据运行它。
N.B。任一文件的顺序都不重要,file1
只处理一次。