我有两个文件,一个只有名字,另一个有相关的值。
第一个文件看起来像这样;
file1.txt
MSPC_Peak_1
MSPC_Peak_10
MSPC_Peak_10
MSPC_Peak_100
MSPC_Peak_1000
.
.
.另一个像这样的文件(我们可以把这个当作参考)
file2.txt
MSPC_Peak_1 603,277
MSPC_Peak_3 690,776
MSPC_Peak_4 520,384
MSPC_Peak_5 4466,64
.
MSPC_Peak_10 686,17
.它们没有相同的行数。
我希望读取file1中的行,并在file2中找到相同的名称,并在其旁边添加值。
所以,输出应该是这样的;
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17
.
.我试过这段代码
'FNR==NR{ arr[$1]; next }$1 in arr' file1 file2这个成功了。但是,不打印重复值。
给出像这样的输出;
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
.
.我在我的研究中找不到解决问题的方法,因为awk对我来说仍然很复杂。
发布于 2021-11-28 01:48:20
在您的示例中,您正在构建一个关联数组arr,并且任何重复的值都会在该过程中被覆盖。最后,数组中有唯一的索引。这就是为什么MSPC_Peak_10匹配只打印一次的原因。要获得所有的值,只需构建一个数字索引数组,并在匹配时访问所有条目。
$ awk 'FNR==NR{ arr[NR]=$0 }
NR!=FNR{ for(i in arr){
if(arr[i]==$1){ print arr[i],$2 } } }' file1 file2
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17发布于 2021-11-28 05:57:18
您只需逆转文件处理,并使用以下命令完成:
awk 'FNR==NR {map[$1]=$2; next} $1 in map {print $1, map[$1]}' file2 file1
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17https://stackoverflow.com/questions/70139908
复制相似问题