找到匹配的模式并打印具有相应值的行
find matching pattern and print the line with the corresponding value
我有两个文件,一个只有名称,另一个有相关值。
第一个文件看起来像这样;
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[]; next } in arr' file1 file2
这成功了。但是,不打印重复值。
给出类似的输出;
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
.
.
我在研究中找不到修复它的方法,因为 awk 对我来说仍然很复杂。
在您的示例中,您正在构建一个关联数组 arr
并且在此过程中任何重复的值都会被覆盖。您最终得到数组中的唯一索引。这就是 MSPC_Peak_10 匹配只打印一次的原因。要获取所有值,只需构建一个数字索引数组并在匹配时访问所有条目。
$ awk 'FNR==NR{ arr[NR]=[=10=] }
NR!=FNR{ for(i in arr){
if(arr[i]==){ print arr[i], } } }' file1 file2
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17
您可以使用以下命令反转文件处理并完成它:
awk 'FNR==NR {map[]=; next} in map {print , map[]}' file2 file1
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17
我有两个文件,一个只有名称,另一个有相关值。
第一个文件看起来像这样;
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[]; next } in arr' file1 file2
这成功了。但是,不打印重复值。
给出类似的输出;
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
.
.
我在研究中找不到修复它的方法,因为 awk 对我来说仍然很复杂。
在您的示例中,您正在构建一个关联数组 arr
并且在此过程中任何重复的值都会被覆盖。您最终得到数组中的唯一索引。这就是 MSPC_Peak_10 匹配只打印一次的原因。要获取所有值,只需构建一个数字索引数组并在匹配时访问所有条目。
$ awk 'FNR==NR{ arr[NR]=[=10=] }
NR!=FNR{ for(i in arr){
if(arr[i]==){ print arr[i], } } }' file1 file2
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17
您可以使用以下命令反转文件处理并完成它:
awk 'FNR==NR {map[]=; next} in map {print , map[]}' file2 file1
MSPC_Peak_1 603,277
MSPC_Peak_10 686,17
MSPC_Peak_10 686,17