File1.log
207.46.13.90 37556
157.55.39.51 34268
40.77.167.109 21824
157.55.39.253 19683
File2.log
207.46.13.90 62343
157.55.39.51 58451
157.55.39.200 37675
40.77.167.109 21824
A continuación se debe esperar Output.log
207.46.13.90 37556 62343
157.55.39.51 34268 58451
157.55.39.200 ----- 37675
40.77.167.109 21824 21824
157.55.39.253 19683 -----
Intenté con el siguiente comando 'unirse', pero omite la línea que falta
join --nocheck-order File1.log File2.log
Salida como a continuación (no como se esperaba)
207.46.13.90 37556 62343
157.55.39.51 34268 58451
40.77.167.109 21824 21824
¿Podría alguien ayudarme con el comando adecuado para la salida deseada? Gracias por adelantado
2 respuestas
Por favor, intente seguir.
awk '
FNR==NR{
a[$1]=$2
next
}
($1 in a){
print $0,a[$1]
b[$1]
next
}
{
print $1,$2 " ----- "
}
END{
for(i in a){
if(!(i in b)){
print i" ----- "a[i]
}
}
}
' Input_file2 Input_file1
La salida será la siguiente.
207.46.13.90 37556 62343
157.55.39.51 34268 58451
40.77.167.109 21824 21824
157.55.39.253 19683 -----
157.55.39.200 ----- 37675
Lo siguiente es suficiente si no le importa el orden de salida:
join -a1 -a2 -e----- -oauto <(sort file1.log) <(sort file2.log) |
column -t -s' ' -o' '
Con recreación de los archivos de entrada:
cat <<EOF >file1.log
207.46.13.90 37556
157.55.39.51 34268
40.77.167.109 21824
157.55.39.253 19683
EOF
cat <<EOF >file2.log
207.46.13.90 62343
157.55.39.51 58451
157.55.39.200 37675
40.77.167.109 21824
EOF
Salidas:
157.55.39.200 ----- 37675
157.55.39.253 19683 -----
157.55.39.51 34268 58451
207.46.13.90 37556 62343
40.77.167.109 21824 21824
join
por defecto se une por las primeras columnas. El -a1 -a2
hace que imprima las líneas no coincidentes de ambas entradas. El -e-----
imprime columnas desconocidas como puntos. -oauto
determina la salida de las columnas de las entradas. Debido a que queremos ordenar en la primera columna, no necesitamos especificar -k1
a sort
, pero sort -s -k1
podría acelerar las cosas. Para que coincida con la salida esperada, también canalé a column
.
Puede ordenar la salida por puertos canalizándola, por ejemplo, a sort -rnk2,3
.
Preguntas relacionadas
Nuevas preguntas
linux
Las preguntas de Linux deben estar relacionadas con la programación. Use esta etiqueta solo si su pregunta se relaciona con la programación utilizando API de Linux o un comportamiento específico de Linux, no solo porque ejecuta su código en Linux. Si necesita soporte para Linux, puede probar https://unix.stackexchange.com o el sitio específico de Stack Exchange de la distribución de Linux como https://askubuntu.com o https://elementaryos.stackexchange.com/