gpt4 book ai didi

perl - 合并由两列组成的文件

转载 作者:行者123 更新时间:2023-12-01 13:49:50 26 4
gpt4 key购买 nike

我有多个这样的文件:

文件1:

rsRNA-2312-n    2
rsRNA-6508-n 2
rsRNA-6382-n 10
rsRNA-951-n 0
rsRNA-6330-n 4
rsRNA-6330-n 11
rsRNA-1385-n 3
rsRNA-4945-n 0
rsRNA-946-n 9

文件2:

rsRNA-552-n 2
rsRNA-5301-n 7
rsRNA-6487-n 0
rsRNA-4945-n 7
rsRNA-2445-n 9
rsRNA-6490-n 2

文件3:

rsRNA-4946-n    1
rsRNA-5058-n 0
rsRNA-552-n 0
rsRNA-849-n 2
rsRNA-3302-n 2
rsRNA-4099-n 0
rsRNA-552-n 1

我想合并创建一个输出的文件,该输出在单独的列中具有每个输入文件的值,在第 1 列中具有唯一标识符(输入文件中的第 1 列)。如果在特定输入文件中未找到标识符,则对于此特定输入,此标识符的计数应为 0。

输出类似(非真实数据):

identifier   file1   file2    file3
rsRNA-552-n 2 4 5
rsRNA-5301-n 7 12 2
rsRNA-6487-n 0 1 5
rsRNA-4945-n 7 12 1
rsRNA-2445-n 9 4 55
rsRNA-6490-n 2 1 0

正在尝试:

paste <(awk '{print $2}' file1 ) <(awk '{print $2}' file2 ) <(awk '{print $2}' file3) <(awk '{print $2}' file4)

并使用 for 循环:

for f in file*; do
base_name=${f%.txt}
id=${base_name#*_}
awk > "output${id}"
done

最佳答案

使用 shell 循环来操作文本始终是错误的方法。只需使用 awk,这就是它的设计目的。将 GNU awk 4.* 用于真正的多维数组和 ARGIND 并在 in 中排序:

$ cat tst.awk
{
split($1,a,/-/)
key = a[2]
key2name[key] = $1
key2val[key][ARGIND] = $2
}
END {
printf "identifier"
for (fileNr=1;fileNr<=ARGIND;fileNr++) {
printf "%s%s", OFS, ARGV[fileNr]
}
print ""

PROCINFO["sorted_in"] = "@ind_num_asc"
for (key in key2name) {
printf "%s", key2name[key]
for (fileNr=1;fileNr<=ARGIND;fileNr++) {
printf "%s%s", OFS, (fileNr in key2val[key] ? key2val[key][fileNr] : 0)
}
print ""
}
}

.

$ awk -f tst.awk file1 file2 file3
identifier file1 file2 file3
rsRNA-552-n 0 2 1
rsRNA-849-n 0 0 2
rsRNA-946-n 9 0 0
rsRNA-951-n 0 0 0
rsRNA-1385-n 3 0 0
rsRNA-2312-n 2 0 0
rsRNA-2445-n 0 9 0
rsRNA-3302-n 0 0 2
rsRNA-4099-n 0 0 0
rsRNA-4945-n 0 7 0
rsRNA-4946-n 0 0 1
rsRNA-5058-n 0 0 0
rsRNA-5301-n 0 7 0
rsRNA-6330-n 11 0 0
rsRNA-6382-n 10 0 0
rsRNA-6487-n 0 0 0
rsRNA-6490-n 0 2 0
rsRNA-6508-n 2 0 0

我添加了 key 的轻微额外复杂性作为第一个字段的数字部分,因此在输出结果时,它们可以在该子字段上按数字排序。

关于perl - 合并由两列组成的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32770802/

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