Tengo un archivo de entrada ( input.txt ) como a continuación.
id1 id2 name weight
53723848 12651711 timburnes 1.36667
53530214 12651711 timburnes 1.51191
53723848 53530214 timburnes 1.94
764157 52986038 ericcartman 0.861145
56797854 764157 ericcartman 1.35258
56797854 52986038 ericcartman 1.73781
Tenga en cuenta que la primera línea no es parte del archivo real, la he agregado aquí para mayor claridad .
Estoy tratando de extraer los valores de id1
y id2
para 2 archivos separados llamados unique.txt y duplicate.txt .
Si el weight
valor de mi columna es mayor que 1.5, significa que tengo identificadores duplicados . En este caso, moveré el id1
valor al unique.txt
archivo y el id2
valor al duplicate.txt
archivo.
Si mi columna de peso es menor a 1.5, significa que no tengo valores duplicados. Entonces, en este caso, moveré ambos id1
y id2
al archivo unique.txt .
Entonces, para la entrada anterior, espero la salida como,
Para el archivo unique.txt ,
53723848 timburnes
764157 ericcartman
56797854 ericcartman
Para el archivo duplicate.txt ,
12651711 timburnes
53530214 timburnes
52986038 ericcartman
Puedo encontrar los duplicados usando el siguiente código.
Para obtener los valores mayores que 1.5 basados en la cuarta columna,
awk -F" " '$4 >= 1.5 { print $1" " $2" " $3" " $4}' file1.txt > Output.txt
Ahora, para valores superiores a 1.5, puedo usar el siguiente código para fusionar los identificadores duplicados en función de sus nombres.
perl -ane 'foreach(@F[0..1]){$k{$F[2]}{$_}++}
END{
foreach $v (sort keys(%k)){
print "$_ " foreach(keys(%{$k{$v}}));
print "$v\n"
};
} ' Output.txt
Sin embargo, no puedo obtener la salida de la manera que me gusta en el enfoque anterior.
EDITAR :
Estoy ejecutando el comando para mi entrada como se muestra a continuación.
awk '{
if ($4 > 1.5) {
if (++dup[$2] == 1) print $2, $3 > "duplicate.txt"
}
else
if (++uniq[$1] == 1) print $1, $3 > "unique.txt"
}' << END
17412193 43979400 ericcartman 2.16667
21757330 54678379 andrewruss 0.55264
END
Estoy obteniendo la salida como,
-bash-3.2$ cat unique.txt
21757330 a.andreev
-bash-3.2$ cat duplicate.txt
43979400 ericcartman
Sin embargo, el resultado que espero es,
cat unique.txt
17412193 ericcartman
21757330 andrewruss
54678379 andrewruss
cat duplicate.txt
43979400 ericcartman
$4
es menor que 1.5, los agregaré al unique.txt
archivo. Además, antes de insertar algo que sea unique.txt
o duplicate.txt
archivo, voy a tener que comprobar si el valor ya está presente en el archivo. Si ya está presente, no necesito insertarlo nuevamente.
$1
y $2
cuándo $4
es inferior a 1,5?
unique.txt
archivo. Por lo tanto, supongo que si $4
es inferior a 1,5, voy a añadir $1
y $2
a unique.txt
presentar.
$4
menos que1.5
?