2014-09-02 4 views
-5

J'ai un problème. J'ai trois séquences de caractères. Chacun a 300 caractères et ils sont dans des fichiers différents. Je veux les diviser en 60 et les combiner en un seul. caractères sont des lettres diffrent et * - +Comment combiner trois fichiers en un seul

C'est schéma de mon problème:

1.txt

aaaaaaa 

2.txt

vvvvvvv 

3.txt

ccccccc 

Je voudrais les diviser en trois et combiner ces trois fichiers en un 4.txt.

sortie souhaitée:

aaa 
vvv 
ccc 

aaa 
vvv 
ccc 

a 
v 
C 

Merci beaucoup pour toute aide

+1

On ne sait pas ce que vous voulez. En outre, lorsque vous indiquez 'awk', cela signifie que vous savez que cet outil peut le faire. alors, qu'avez-vous essayé jusqu'à présent? Vous pouvez être proche de la solution. – fedorqui

+0

-1 la question. Si vous avez un problème et demandez à quelqu'un d'autre, vous devriez faire de votre mieux pour expliquer clairement votre problème. Personne ne saura exactement ce que vous voulez exactement en lisant votre question. Par exemple. le fichier 1 a '7 a', le fichier 2 a' 7 v' le fichier 3 a '6 c' pourquoi un' a/v' a-t-il été enlevé? lequel devrait être retiré? tes entrées sont toujours la même lettre? pourraient-ils être multi-lignes? quelle est la règle à diviser en plusieurs parties? Si vous demandez à quelqu'un de vous aider, soyez sérieux. – Kent

+0

Kent: Désolé pour ça: je pense que mon message est plus clair maintenant. –

Répondre

0

Quelque chose comme ça devrait le faire (en utilisant GNU awk pour ARGC, ARGIND et FS = ""):

$ cat tst.awk 
BEGIN{ FS=""; charsInGrp=3 } 
{ 
    numRows=0 
    for (grpNr=1;grpNr<=NF;grpNr+=charsInGrp) { 
     ++numRows 
     for (delta=0; delta<charsInGrp; delta++) { 
      charGrp[ARGIND,numRows] = charGrp[ARGIND,numRows] $(grpNr+delta) 
     } 
    } 
} 
END { 
    for (rowNr=1;rowNr<=numRows;rowNr++) { 
     for (fileNr=1;fileNr<ARGC;fileNr++) { 
      print charGrp[fileNr,rowNr] 
     } 
     print "" 
    } 
} 
$ 
$ awk -f tst.awk 1.txt 2.txt 3.txt 
aaa 
vvv 
ccc 

aaa 
vvv 
ccc 

a 
v 
c 

Il suffit de changer charsInGrp=3 pour la valeur que vous aimez, par exemple 60.

Questions connexes