从bash中的多个tsv文件中连接选定的列

最大限度

我有一堆用制表符分隔的文本文件,例如以下文件

"gene_id"   "Pattern1"  "Pattern2"  "Pattern3"  "Pattern4"  "Pattern5"  "MAP"   "PPDE"
"ENSG00000119771.13"    3.11528786599051e-18    2.52650109640992e-13    6.25109524320237e-09    0.345846257420197   0.654153736328455   "Pattern5"  1
"ENSG00000123700.4" 1.75016991626305e-36    3.98804090894939e-19    0.63423772228367    3.8159144080782e-21 0.36576227771633    "Pattern3"  1
"ENSG00000128567.15"    1.10722918612618e-23    7.62691311068806e-07    5.77031364194955e-06    5.13675840911147e-21    0.999993466995047   "Pattern5"  1
"ENSG00000130182.6" 9.75717082221716e-22    1.27675651077242e-12    0.469972541094369   1.13677117238758e-12    0.530027458903217   "Pattern5"  1
"ENSG00000131914.9" 3.1627489688037e-41 1.00274706758683e-22    0.0578584524816503  6.98718794692175e-22    0.94214154751835    "Pattern5"  1

现在我想将它们加入到一个文件中,这样我就可以

"gene_id"   "Pattern5"  "Pattern5"  "Pattern5"  "Pattern5"  "Pattern5"  

其中每一Pattern5列都来自一个文件。

我尝试了一些东西

cut -f 6 <file>

paste <file1> <file2> ...

但我无法正确组合。

谢谢您的帮助!

更新:我尝试为您提供一个可测试的示例,作为此处的输入:

<file1>
gene_id Pattern1    Pattern2    Pattern3    Pattern4    Pattern5
ENSG00000119771 1   2   3   4   5
ENSG00000123700 1   2   3   4   5
ENSG00000128567 1   2   3   4   5
ENSG00000130182 1   2   3   4   5
ENSG00000131914 1   2   3   4   5

<file2>         
gene_id Pattern1    Pattern2    Pattern3    Pattern4    Pattern5
ENSG00000119771 6   7   8   9   10
ENSG00000123700 6   7   8   9   10
ENSG00000128567 6   7   8   9   10
ENSG00000130182 6   7   8   9   10
ENSG00000131914 6   7   8   9   10

<file3>             
gene_id Pattern1    Pattern2    Pattern3    Pattern4    Pattern5
ENSG00000119771 11  12  13  14  15
ENSG00000123700 11  12  13  14  15
ENSG00000128567 11  12  13  14  15
ENSG00000130182 11  12  13  14  15
ENSG00000131914 11  12  13  14  15

和所需的输出将是

gene_id Pattern5_file1  Pattern5_file2  Pattern5_file3
ENSG00000119771 5   10  15
ENSG00000123700 5   10  15
ENSG00000128567 5   10  15
ENSG00000130182 5   10  15
ENSG00000131914 5   10  15

UPDATE2:我尝试了Ed Morton的方法:

awk '
BEGIN { FS=OFS="\t" } FNR==1{ARGIND++}
{ genes[$1]; val[$1,ARGIND] = $5 }
END {
    for (gene in genes) {
        printf "%s%s", gene, OFS
        for (file=1; file<=ARGIND; file++) {
            printf "%s%s", val[gene,file], (file<ARGIND?OFS:ORS)
        }
    }
} ' $files

但是输出格式不正确:

ENSG00000128567 4   9   14
ENSG00000130182 4   9   14
ENSG00000119771 4   9   14
gene_id Pattern4    Pattern4    Pattern4
ENSG00000131914 4   9   14
ENSG00000123700 4   9   14
李浩Y

试试这个

#!/bin/bash

paste file1 file2 file3 | awk -v patternIdx=6 '

function printPattern(idx, isFirstLine) {
    for (i = 1; i <= NF; ++i) { 
        if (i == 1) 
            printf "%s ", $i;
        else if (isFirstLine && i % patternIdx == 0)
            printf "%s_file%d ", $i, i / patternIdx;
        else if (i % patternIdx == 0)
            printf "%d ", $i;
    }
    printf "\n"
} 
{ 
    if (NR == 1)
        printPattern(patternIdx, 1);
    else
        printPattern(patternIdx, 0); 
}'

patternIdx是以下内容的列索引 Pattern5

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制bash中的选定文件

来自分类Dev

如何使用R中的lappy保存选定列的多个文件

来自分类Dev

打印文件中的选定列

来自分类Dev

尝试基于两个常见列合并R中的多个tsv文件

来自分类Dev

从多个tsv / csv文件中获取标头

来自分类Dev

在Linux中连接多个文件

来自分类Dev

读取bash中的多个文件

来自分类Dev

将tsv文件中的json列解析为Spark RDD

来自分类Dev

python在具有行号的多列tsv文件中读取

来自分类Dev

使用AWK计算TSV文件中列值的出现次数

来自分类常见问题

在Java中读取.tsv文件

来自分类Dev

在R中读写.TSV文件

来自分类Dev

在Lua中处理TSV文件

来自分类Dev

在pyspark中读取TSV文件

来自分类Dev

在R中读写.TSV文件

来自分类Dev

在python中读取tsv文件

来自分类Dev

在多个文件中查找多个模式bash

来自分类Dev

连接CSV文件中的列

来自分类Dev

使用merge()函数仅左连接R中的选定列

来自分类Dev

处理存储中多个选定文件的意图结果

来自分类Dev

如何在ckfinder中获取多个选定文件的URL

来自分类Dev

在 Qt 中连接多个 .ui 文件

来自分类Dev

如何从多个文件中的一个文件解析一个列并连接输出?

来自分类Dev

从文件夹中存在的多个.csv文件中导入R中的选定.csv文件

来自分类Dev

Bash脚本中多个文件的输出NamingVariable

来自分类Dev

更改bash中多个文件的权限

来自分类Dev

从tsv文件中打印出row [3]

来自分类Dev

awk 匹配一个 TSV 列并用 bash 中的前缀替换所有行

来自分类Dev

如何连接bash中包含文件中的字符串