linux - 从多个文件中检索不同的信息,将它们合二为一。 BASH

我的 BASH script 有问题,我想检索多个文件中包含的信息并将它们收集到一个文件中。

我有一个这种形式的文件,其中包含大约 15000 行:(file1)

1;1;A0200101C
2;2;A0200101C
3;3;A1160101A
4;4;A1160101A
5;5;A1130304G
6;6;A1110110U
7;7;A1110110U
8;8;A1030002V
9;9;A1030002V
10;10;A2120100C
11;11;A2120100C
12;12;A3410071A
13;13;A3400001A
14;14;A3385000G1
15;15;A3365070G1

我需要检索与 id 匹配的每一行的第一条记录。

我的第二个文件是这个,我只需要检索第三行:(file2)

count 
-------
   131
(1 row)

因此,我希望能够组合 (file1) 的 id 和 (file2) 的第 3 行以实现此结果:

1;131
2;131
3;131
4;131
5;131
6;131
7;131
8;131
9;131
11;131
12;131
13;131
14;131
15;131

谢谢你。

回答1

一种可能的方式:

#!/usr/bin/env bash

count=$(awk 'NR == 3 { print $1 }' file2)
while IFS=';' read -r id _; do
    printf "%s;%s\n" "$id" "$count"
done < file1

首先,只读取 file2 的第三行并将其保存在变量中。

然后在循环中读取 file1 的每一行,提取第一个分号分隔的字段,并将其与保存的 value 一起打印。

在纯 awk script 而不是 shell 中使用相同的基本方法将更快、更有效。这样的重写留给读者练习(提示:在 awk 中,FNR == NR 在读取给定的第一个文件时为真,在任何后面的文件中为假。或者,查看如何将 shell 变量传递给awk script;这里有关于它的问答。)

相似文章

最新文章