linux 从多个文件中检索不同的信息,将它们集中在一个文件中,BASH

of1yzvn4  于 2022-11-02  发布在  Linux
关注(0)|答案(1)|浏览(165)

我的bash脚本有问题,我想检索包含在几个文件中的信息,并将它们集中在一个文件中。
我有一个文件在这种形式,其中包含约15000行:(文件1)

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匹配的每行的第一条记录。
我的第二个文件是这样的,我只需要检索第三行:(文件2)

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

因此,我希望能够组合(file 1)的id和(file 2)的第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
  • 谢谢-谢谢
qv7cva1a

qv7cva1a1#

一种可能的方式是:


# !/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的每一行,提取第一个以分号分隔的字段,并将其与保存的值沿着打印。
在纯粹的awk脚本中使用相同的基本方法而不是shell将更快更有效。在awk中,FNR == NR在阅读第一个给定文件时为true,在后面的文件中为false。这里有关于它的问答。)

相关问题