varios usan usa una texto representar regulares que punto por patrones para palabra los listar letra expresiones exacta empiecen doble carácter caracteres buscar archivos linux unix awk cut

linux - usan - Cómo obtener los primeros n caracteres en el archivo de datos de Unix



listar archivos en linux que empiecen por una letra (2)

Estoy tratando de obtener los primeros 22 caracteres de un archivo de datos de Unix. Aquí está mi información se ve a continuación.

Los primeros 12 caracteres son la columna 1 y los siguientes 10 caracteres son la 2da columna.

000000000001199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ- 000000000002199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ- 000000000003199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ- 000000000004199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ- 000000000005199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ- 000000000006199998000180000 DUMMY RAG # MFR NOT ST 1999980 ZZ- 0 0 0ZZ-


Con cut :

$ cut -c-22 file 0000000000011999980001 0000000000021999980001 0000000000031999980001 0000000000041999980001 0000000000051999980001 0000000000061999980001

Si entiendo el segundo requisito, quiere dividir los primeros 22 caracteres en dos columnas de longitud 10 y 12. sed es la mejor opción para esto:

$ sed -r ''s/(.{10})(.{12}).*//1 /2/'' file 0000000000 011999980001 0000000000 021999980001 0000000000 031999980001 0000000000 041999980001 0000000000 051999980001 0000000000 061999980001


sudo_O ha proporcionado una buena solución de corte y sed, acabo de agregar un awk one-liner:

awk ''BEGIN{FIELDWIDTHS="22"} {print $1}'' file echo "000000000001199998000180000 DUMMY RAG"|awk ''BEGIN{FIELDWIDTHS="22"} {print $1}'' 0000000000011999980001

con char vacío (depende de su requisito, desea omitir los espacios o desea incluirlos y contarlos en su resultado)

si los espacios en blanco deben contarse y mostrarse en la salida también: (no es necesario cambiar el cmd anterior)

echo "0 0 0 0 00000001199998000180000"|awk ''BEGIN{FIELDWIDTHS="22"} {print $1}'' 0 0 0 0 00000001199998

si quieres omitir esos espacios: (rápido y sucio)

echo "0 0 0 0 00000001199998000180000"|sed ''s/ //g''|awk ''BEGIN{FIELDWIDTHS="22"} {print $1}'' 0000000000011999980001