traductor traducir portugues mundo linguee italiano ingles frances español buscar shell sed awk grep

shell - portugues - Traducir nueva línea a coma



traductor ingles (4)

Tengo un archivo de texto con una lista de alrededor de 150 a 200 nombres de archivo

abc.txt pqr.txt xyz.txt ... ...

Necesito una cadena de archivos separados por comas. Cada cadena no debe tener más de 20 archivos. Entonces el eco se verá algo como esto ...

$string1="abc.txt,pqr.txt,xyz.txt..." $string2="abc1.txt,pqr1.txt,xyz1.txt..." ...

El número de cadenas será diferente dependiendo del número de líneas en el archivo. He escrito algo como esto ...

#!/bin/sh delim='','' for gsfile in `cat filelist.txt` do filelist=$filelist$delim$gsfile echo $filelist done

El comando Traducir está funcionando como se esperaba, pero ¿cómo puedo restringir cada cadena a 20 nombres de archivo?

cat filelist.txt | tr ''/n'' '',''


Esto podría funcionar para usted:

seq 41 | paste -sd '',,,,,,,,,,,,,,,,,,,/n'' 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 41

o GNU sed:

seq 41 | sed '':a;$bb;N;s//n/&/19;Ta;:b;y//n/,/'' 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 41


Solo usa xargs :

$ seq 1 50 | xargs -n20 | tr '' '' , 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 41,42,43,44,45,46,47,48,49,50


Una forma de usar sed :

Añada Igor Chubin 50 números para infile :

seq 1 50 >infile

Contenido de script.sed :

:b ## While not last line... $! { ## Check if line has 19 newlines. Try substituting the line with itself and ## check if it succeed, then append next line and do it again in a loop. s//(/n[^n]*/)/{19/}/&/ ta N bb } ## There are 20 lines in the buffer or found end of file, so substitute all ''/n'' ## with commas and print. :a s//n/,/g p

Ejecútelo como:

sed -nf script.sed infile

Con el siguiente resultado:

1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 41,42,43,44,45,46,47,48,49,50


Usa una bandera en el comando de sed para reemplazar cada 20ma coma con una nueva línea:

< filelist.txt tr ''/n'' , | sed '':a; s/,//n/20; P; D; ta''; echo