gpt4 book ai didi

linux - 从多个文件中提取数据列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:17:35 24 4
gpt4 key购买 nike

我想就此寻求帮助。非常感谢!

我有数千个文件,每个文件包含 5 列,第一列包含名称。

$ cat file1   
name math eng hist sci
Kyle 56 45 68 97
Angela 88 86 59 30
June 48 87 85 98

我还有一个包含可在 5 列文件中找到的姓名列表的文件。

$ cat list.txt    
June
Isa
Angela
Manny

具体来说,我想以结构化的方式提取与列表文件对应的第 3 列中的数据;代表数千个文件的列和作为行的名称。如果列表文件中的一个名称在 5 列文件中不存在,则应显示为 0。此外,列应以文件名开头。

$ cat output.txt    
names file1 file2 file3 file4
June 87 65 67 87
Isa 0 0 0 54
Angela 86 75 78 78
Manny 39 46 0 38

最佳答案

使用您的测试文件 list.txtfile1(两次)进行测试。首先是 awk:

$ cat program.awk
function isEmpty(arr, idx) { # using @EdMorton's test for array emptiness
for (idx in arr) # for figuring out the first data file
return 0 # https://stackoverflow.com/a/20078022/4162356
return 1
}
function add(n,a) { # appending grades for the chosen ones
if(!isEmpty(a)) { # if a is not empty
for(i in n) # iterate thru all chosen ones
n[i]=n[i] (n[i]==""?"":OFS) (i in a?a[i]:0) # and append
}
}
FNR==1 { # for each new file
h=h (h==""?"":OFS) FILENAME # build header
process(n,a) # and process the previous file in hash a
}
NR==FNR { # chosen ones to hash n
n[$1]
next
}
$1 in n { # add chosen ones to a
a[$1]=$3 #
}
END {
process(n,a) # in the end
print h # print the header
for(i in n) # and names with grades
print i,n[i]
}

运行它:

$ awk -f program.awk list.txt file1 file1
list.txt file1 file1
Manny 0 0
Isa 0 0
Angela 86 86
June 87 87

关于linux - 从多个文件中提取数据列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45409373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com