No, con el título de esta entrada no me refiero a la canción de Pink Floyd ni al homónimo film, o alguna de las otras acepciones que señala la Wikipedia.
Como escribía ayer, me topé con un porblema al entubar algunos comandos. Después de proceder como describí, debía tomar la última parte de lo que obtenía de este pipeline. En el pasado, siempre AWK ha sido mi primer opcion para esto.
Sin embargo, muchos me han preguntado del porqué no uso cut
u otro comando (o filtro, como dicen) menos complicado (dicen) para estas cosas. Así que decidí darle una oportunidad al cut
y mi comando de ayer iba a terminar con algo como:
$ command | sort -t_ -k 3.1,3.10 | tail -n 1 | cut -f 4
pero, ¡oh, sorpresa! No obtenía nada. La salida a procesar por cut
debía ser algo como:
2020-03-11 22:37:19 119909 0f5a6d46-067d-11ea-8d71-362b9e155667/overlays/2019-11-22/7ecef910-0cec-11ea-ab90-71474f15a7d1_7ed38cf0-0cec-11ea-ab90-71474f15a7d1_1574401635/thermal_cam_left.png
de donde el cuarto campo era lo que me interesaba obtener. Tras algunas pruebas supuse que el delimitador de cut
(por defecto un tabulador) sería el culpable. Desafortunadamente, el delimitador en cut
:
cut: the delimiter must be a single character
Try 'cut --help' for more information.
por lo que el comando no sirve si la salida incluye espacios o tabuladores en la salida. Pensando en ello inspecioné la salida:
$ command | sort -t_ -k 3.1,3.10 | tail -n 1 | hexdump
0000000 3032 3032 302d 2d33 3131 3220 3a32 3733
0000010 313a 2039 2020 2020 3131 3939 3930 3020
0000020 3566 3661 3464 2d36 3630 6437 312d 6531
0000030 2d61 6438 3137 332d 3236 3962 3165 3535
0000040 3636 2f37 766f 7265 616c 7379 322f 3130
0000050 2d39 3131 322d 2f32 6537 6563 3966 3031
0000060 302d 6563 2d63 3131 6165 612d 3962 2d30
0000070 3137 3734 6634 3531 3761 3164 375f 6465
0000080 3833 6663 2d30 6330 6365 312d 6531 2d61
0000090 6261 3039 372d 3431 3437 3166 6135 6437
00000a0 5f31 3531 3437 3034 3631 3533 742f 6568
00000b0 6d72 6c61 635f 6d61 6c5f 6665 2e74 6e70
00000c0 0a67
00000c2
y ciertamente, no hay tabuladores pero sí más de un espacio entre campos. A la luz de esto, es obvio que el comando a emplear debió ser:
$ command | sort -t_ -k 3.1,3.10 | tail -n 1 | cut -d ' ' -f 8
pero, ¿hay garantía de que el número de espacio entre campos fuera constante? No, no la hay. Ni modo, de vuelta a AWK.