tagger tag picard para mp3tag mac kid3 for easytag app linux unix sed awk cut

linux - tag - picard app



cómo subcontratar un archivo-seleccione un número de filas o columnas (4)

Me gustaría recibir su consejo / ayuda sobre cómo subcontratar un archivo grande (millones de filas o líneas).

Por ejemplo,

(1) Tengo un archivo grande (millones de filas, delimitado por tabulaciones). Quiero un subconjunto de este archivo con solo filas de 10000 a 100000.

(2) Tengo un archivo grande (millones de columnas, delimitado por tabulaciones). Quiero un subconjunto de este archivo con solo columnas de 10000 a 100000.

Sé que hay herramientas como cabeza, cola, corte, división y awk o sed. Puedo usarlos para hacer subconjuntos simples. Pero, no sé cómo hacer este trabajo.

¿Podría por favor dar algún consejo? Gracias por adelantado.


Algunas soluciones diferentes:

Para rangos de filas: En sed :

sed -n 10000,100000p somefile.txt

Para rangos de columnas en awk :

awk -v f=10000 -v t=100000 ''{ for (i=f; i<=t;i++) printf("%s%s", $i,(i==t) ? "/n" : OFS) }'' details.txt


Filtrar filas es fácil, por ejemplo con AWK:

cat largefile | awk ''NR >= 10000 && NR <= 100000 { print }''

Filtrar columnas es más fácil con CUT:

cat largefile | cut -d ''/t'' -f 10000-100000

Como mencionó Rahul Dravid, el cat no es una obligación aquí, y como agregó Zsolt Botykai, puede mejorar el rendimiento usando:

awk ''NR > 100000 { exit } NR >= 10000 && NR <= 100000'' largefile cut -d ''/t'' -f 10000-100000 largefile


Le dieron una paliza por la solución sed, por lo que publicaré un perl Dito en su lugar. Para imprimir lineas seleccionadas.

$ seq 100 | perl -ne ''print if $. >= 10 && $. <= 20'' 10 11 12 13 14 15 16 17 18 19 20

Para imprimir columnas selectivas, utilice

perl -lane ''print $F[1] .. $F[3] ''

-F se utiliza junto con -a , para elegir el delimitador para dividir las líneas.

Para probar, usa seq y paste para obtener generar algunas columnas

$ seq 50 | paste - - - - - 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

Imprimimos todo excepto la primera y la última columna

$ seq 50 | paste - - - - - | perl -lane ''print join " ", $F[1] .. $F[3]'' 2 3 4 7 8 9 12 13 14 17 18 19 22 23 24 27 28 29 32 33 34 37 38 39 42 43 44 47 48 49

En la instrucción de join anterior, hay una pestaña, se obtiene haciendo una pestaña ctrl-v.


Para el primer problema, seleccionar un conjunto de filas de un archivo grande, es muy sencillo de unir a la cola. Desea 90000 filas del archivo grande a partir de la fila 10000. la cola agarra el extremo posterior del archivo grande a partir de la fila 10000 y luego la cabeza corta todas las filas excepto las primeras 90000.

tail -n +10000 largefile | head -n 90000 -