Me gustaría pegar solo la tercera columna de datos desde la terminal.
Originalmente tengo algo como:
4 SF0086 SF0086
12 SF0087 SF0087
17 TSF141 TSF141
29 TSF070 TSF070
30 TSF028 TSF028
31 TSF122 TSF122
Lo copio y pego en la terminal y se convierte en una sola línea.
4 SF0086 SF0086 12 SF0087 SF0087 17 TSF141 TSF141 29 TSF070 TSF070 30 TSF028 TSF028 31 TSF122 TSF122
Me gustaría conseguirlo como:
SF0086
SF0087
TSF141
TSF070
TSF028
TSF122
Puedo guardar la opción de una línea (en el medio) como un archivo en ese momento y luego usar algo como awk
o sed
cualquier perl
cosa disponible en el sistema POSIX común es una opción, pero no lo he descubierto. Tampoco he tenido suerte con el paste
comando y estoy llegando a la conclusión de paste
que no podrán hacerlo por mí. Los datos cambian (lo que significa que el espaciado cambiará) cada vez que necesito extraer la tercera columna. ¿Algún extractor de datos/maestro de formateo disponible?
Respuesta1
'cortar' es el comando que estás buscando. Usted especifica qué delimitador usar (creo que el espacio en blanco es el valor predeterminado) y qué columna desea. La página de manual enumerará todos los detalles.
Tendrás que asegurarte de que se pegue con las nuevas líneas intactas para que funcione correctamente.
Respuesta2
Lo que funcionó mejor para mí, ya que siempre tendré duplicados y la numeración (campos -f) siempre cambiará, además del hecho de que mi lista puede tener cientos de campos, cut
no resultó ser una opción válida.
Esto es lo que produjo lo que quería:
sed -e 's/\s\+/\n/g' data.txt > data_cr.txt && sort data_cr.txt | uniq -d > final.txt
Dónde:
sed -e 's/\s\+/\n/g' data.txt > data_cr.txt
fuerza todo el texto, separado por espacios, en su propia línea y lo escribe en un nuevo archivo data_cr.txt...y
sort data_cr.txt | uniq -d > final.txt
toma los datos línea por línea y solo imprime una única copia de los duplicados.