我的 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;这里有关于它的问答。)