merge des files dans un seul dataframe

J'ai presque 160 files txt, chaque file a 7 colonnes et maintenant je veux mettre cela dans un seul file. Chacun des files de la première et de la sixième colonne (Geneid, Longueur) est le même, je veux juste que ce soit la 1ère et la 2ème colonne du file final et de tous les files extraire datatables de la 7ème colonne (sample1, sample2, sample3 … ..) et mettre dans le file final.

Exemple:

Échantillon 1:

Geneid Chr Start End Strand Length Sample1 ENSG00000223972.5 Chr1 34554 12227 ++ 1735 0 ENSG00000227232.5 Chr2 14404 1450 ++ 1351 12 ENSG00000278267.1 Chr3 17369 17436 ++ 68 20 ENSG00000243485.4 Chr4 29554 3003 ++ 1021 0 ENSG00000237613.2 Chr5 14404 35174 ++ 1219 0 

Échantillon 2:

 Geneid Chr Start End Strand Length Sample2 ENSG00000223972.5 Chr1 11869 1450 ++ 1735 180 ENSG00000227232.5 Chr2 14404 17436 ++ 1351 40 ENSG00000278267.1 Chr3 17369 17436 ++ 68 9 ENSG00000243485.4 Chr4 14404 3003 ++ 1021 49 ENSG00000237613.2 Chr5 17369 3003 ++ 1219 3 

Échantillon 3:

 Geneid Chr Start End Strand Length Sample3 ENSG00000223972.5 Chr1 17369 1450 ++ 1735 11 ENSG00000227232.5 Chr2 29554 17436 ++ 1351 156 ENSG00000278267.1 Chr3 34554 3003 ++ 68 56 ENSG00000243485.4 Chr4 14404 3003 ++ 1021 89 ENSG00000237613.2 Chr5 17369 35174 ++ 1219 23 

La production finale devrait être

 Geneid Length Sample1 Sample2 Sample3 ENSG00000223972.5 1735 0 180 11 ENSG00000227232.5 1351 12 40 156 ENSG00000278267.1 68 20 9 56 ENSG00000243485.4 1021 0 49 89 ENSG00000237613.2 1219 0 3 23 

Utiliser awk avec la paste (pour la question révisée).

 awk '{printf("%s\t%s", $1, $6); for(i=7;i<=NF;i+=7) printf ("\t%s", $i); printf "\n"}' <(paste files) >final_file 

Ps: Changez les controls de formatting printf fonction de la valeur réelle de vos champs.

Explications:

  • {printf ("%s\t%s" ,$1, $6)} imprimez les première et sixième colonnes en premier.

  • for(i=7;i<=NF;i+=7) printf ("\t%s", $i); Ensuite, nous effectuons une boucle sur les champs de repos et imprimons seulement la 7ème colonne et chaque champ avec le module de 7.

  • Tout d'abord, nous collons tous les files set puis les transmettons à awk . files signifie que vous pouvez paste des files avec plusieurs files tels que myfiles* dont tous les files commencent par des myfiles suivis de n'importe quoi.