模式文件作为 awk/sed/grep 中 RS、FS 的输入来识别和添加列

模式文件作为 awk/sed/grep 中 RS、FS 的输入来识别和添加列

我有一个文件,其中包含我必须在给定数据集中找到的模式,并将数字添加到数据列中。我想编写一个脚本或使用 awk/sed/grep 自动查询给定文件中的模式,以与我拥有的数据进行交叉检查,并在具有匹配模式的列中添加数字。

例子:-

数据

标题、计数、RESA

10th ECOMF,PAB  1   MAT

10th ICOCPS (CPV-'10)   23  SCI

10th ICOCPS (CPV-'10)   6   SCI

10th ICOMAMOS (M2S-X)   3   EEE

JOP 32  COP

AIP 34  Sff

JOP 43  COP

HIT 42  tilde

我的模式文件包含期刊名称:-

10th ECOMF,PAB

10th ICOCPS (CPV-'10)

10th ICOCPS (CPV-'10)

10th ICOMAMOS (M2S-X)

JOP

AIP

JOP

HIT

SUPERCONDUCTIVITY (M2S-X)

期望的输出:

10th ECOMF,PAB  1

10th ICOCPS (CPV-'10)   29

10th ICOMAMOS (M2S-X)   3

JOP 75

AIP 34

HIT 42

.

.

很快,

PS:- 数据是制表符分隔的,我在 CSV 中也有相同的数据。

答案1

awk解决方案:

awk 'BEGIN{ FS=OFS="\t" }
     NR==FNR{ if(NF && !($0 in b)) { a[++c]=$0; b[$0] } next }{ b[$1]+=$2 }
     END{ len=length(a); for(i=1;i<=len;i++) if(a[i] in b) print a[i],b[a[i]] }' patterns data

  • BEGIN{ FS=OFS="\t" }- 设置字段分隔符

  • a[++c]=$0; b[$0]- 收集独特的杂志patterns文件中的名称

  • b[$1]+=$2- 总结每个数字杂志data文件内的名称

  • if(a[i] in b) print a[i],b[a[i]]- 将总和值附加到每个杂志pattern文件中的名称

输出:

10th ECOMF,PAB  1
10th ICOCPS (CPV-'10)   29
10th ICOMAMOS (M2S-X)   3
JOP 75
AIP 34
HIT 42
...

相关内容