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