我需要一种有效的方法来组合数千个 csv 文件

我需要一种有效的方法来组合数千个 csv 文件

我在stackoverflow上问了同样的问题,但没有得到满意的答案。

我有一个像这样的目录树:

bacteria > species(num subdirs = 1300) > kmer(num subsudirs = 9)

目录和子目录按如下方式组合:

bacteria/specie1/kmer2/csv
                    kmer3/csv
                    .
                    .
                    kmer9/csv

         specie2/kmer2/csv
                    kmer3/csv
                    .
                    .
                    kmer9/csv

         specie1300/kmer2/csv
                    kmer3/csv
                    .
                    .
                    kmer9/csv

kmer 子目录中有 csv 文件,根据物种的不同,它有 1 个或多个文件。

csv 文件很简单,两个 coulmn 与 kmer 并且很重要。我真的不知道是否所有较大的 kmer(例如 6 个或以上)都会具有相同的 kmer 键,因为我正在计算它们

例如:

bacteria/species1/kmer2/example_csv_k2_count.csv

csv example_csv_k2_count.csv 具有以下结构:

kmer,count
AA, 10
AC, 20
.
.
.

对于每个物种和 kmer 计数,我需要将每个 kmer 计数 (2-9) 的 csv 文件连接到一个主 csv 中。例如,对于具有 kmer2 计数的所有物种的子目录,我需要

specie1.csv1
kmer, count
aa, 22
at, 21...

specie1.csv2
kmer, count
aa, 31 
at, 18...

对于细菌/species2/kmer2:

specie2.csv1
kmer, count
aa, 22
at, 21...

specie2.csv2
kmer, count
aa, 31 
at, 18...

我需要为每个物种制作一个主 kmer2_count.csv 并且它们的 kmer 计数:

kmer, count
    aa, 22, 31,...
    at, 21, 18,...

我尝试了在堆栈、谷歌中搜索的许多代码和命令,但我总是将它们堆叠起来:

kmer, count
    aa, 31 
    at, 18...
kmer, count
    aa, 22
    at, 21...

我尝试过的 shell 命令示例:

    $ cat */kmer2/*.csv | datamash -t , transpose
    datamash: transpose input error: line 275 has 1 fields (previous lines had 2);

例2:

 awk '
            FNR==1 && NR!=1 { while (/^<header>/) getline; }
            1 {print}
        ' */kmer9/*.csv > ex.csv

现在我正在使用 python/pandas 并完成了工作,但是对于 kmer 计数大于 6,例如 7,我的笔记本可以连续工作 3 天。我试图将其合并以得出计数平均值,因为许多物种的基因组已测序多次,或者因为它们是亚种或品系。然后我将制作一个包含所有测序基因组平均值的主文件。

因为这个我会喜欢 shell 解决方案。

谢谢,保罗

PS = 抱歉,解释我需求的文字很糟糕。希望现在变得更加清晰。我很抱歉

答案1

我不确定是否理解你的目标。

如果您需要从

cat input1.csv
kmer,count
aa,22
at,21

cat input2.csv
kmer,count
aa,31 
at,18

就像是

kmer,count
aa,22;31
at,21;18

您可以使用磨坊主并运行

mlr --csv nest --implode --values --across-records -f count input1.csv input2.csv

相关内容