我有一个文件,其中包含我必须在给定数据集中找到的模式,并将数字添加到数据列中。我想编写一个脚本或使用 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
...