Tengo dos archivos con líneas ordenadas. Un archivo (B) es un subconjunto del otro archivo (A). Me gustaría encontrar todas las líneas en A que NO estén en B. Idealmente, me gustaría crear un archivo (C) que contenga estas líneas. ¿Es esto posible en Unix? Estoy buscando un comando de una línea para hacer esto en lugar de escribir un guión. Miré los comandos join
y diff
, pero no pude encontrar una opción de comando para hacer esto. Gracias por la ayuda.¿Cómo encontrar el conjunto - Subconjunto de dos archivos desde la línea de comando?
Respuesta
Esto suprimirá líneas comunes:
comm -3 a b
¿Qué tal esto:
grep -v -f B A > C
Usted puede hacer esto con diff también. Diff (a diferencia de @ johlo respuesta grep) se preocupa por fin, funciona en archivos sin ordenar (a diferencia de @ johnshen64 respuesta Comm):
$ cat a
a
b
c
d
e
$ cat b
a
b
f
d
e
$ diff -dbU0 a b
--- a 2012-05-18 16:02:30.603386016 -0400
+++ b 2012-05-18 16:02:45.547817122 -0400
@@ -3 +3 @@
-c
+f
esta manera puede utilizar una tubería para conseguir el fin sólo las líneas -considerando omitidas:
$ diff -dbU0 a b | tail -n +4 | grep ^- | cut -c2-
c
Awk solución
archivos de entrada
un
aaa
bbb
ccc
b
ccc
ddd
eel
Código
awk ' NR==FNR { A[$0]=1; next; }
{ if ($0 in A) { A[$0]=0; } }
END { for (k in A) { if (A[k]==1) { print k; } } } ' a b > c
c (Archivo de salida)
bbb
aaa
OP solicitó específicamente una solución que no sea de script. Dado, has puesto el script en la línea de comando, pero ... – derobert
Este comando join
hará lo que preguntas:
join -v 1 fileA fileB > fileC
Demostración:
$ cat fileA
a
c
d
g
h
t
u
v
z
$ cat fileB
a
d
g
t
u
z
$ join -v 1 fileA fileB
c
h
v
Esto supone que los archivos ordenados como ha afirmado en su pregunta. Para los archivos sin ordenar:
join -v 1 <(sort fileA) <(sort fileB)
- 1. Mover archivos desde la línea de comando
- 2. Cómo sincronizar el directorio FTP desde la línea de comando?
- 3. Entrada desde la línea de comando
- 4. ¿Cómo obtener la línea de comando desde una aplicación ClickOnce?
- 5. ¿Cómo ejecutar el código PHP desde la línea de comando?
- 6. cómo publicar una solicitud HTTP desde la línea de comando
- 7. subconjunto coincidente de dos segmentos de línea coincidentes
- 8. ¿Cómo puedo emitir un solo comando desde la línea de comando a través de sql plus?
- 9. instrucción sqlplus desde la línea de comando
- 10. Creando el proyecto Xcode desde la línea de comando
- 11. Sobrescribir el marco de destino desde la línea de comando
- 12. ¿Cómo ejecuto Scala + specs2 desde la línea de comando?
- 13. MSBuild - Obteniendo el destino llamado desde la línea de comando
- 14. ¿Perforce la resolución automática desde la línea de comando?
- 15. Obtener archivos modificados de la línea de comando svn entre dos fechas
- 16. Ejecutar el comando vim desde la línea de comandos
- 17. ¿Cómo evaluar un cuaderno desde la línea de comando?
- 18. ¿Cuál es la forma más rápida de obtener la media de un conjunto de números desde la línea de comando?
- 19. ¿Cómo usar GIT PULL desde la línea de comando?
- 20. ¿Cómo construyes un proyecto IntelliJ desde la línea de comando?
- 21. Cómo ejecutar TestNG desde la línea de comando
- 22. ¿Cómo ejecutar Matlab desde la línea de comando?
- 23. ¿Cómo cierro JBoss AS 7.1.0 desde la línea de comando?
- 24. Oracle sqldeveloper - cómo conectar DB desde la línea de comando
- 25. ¿Cómo obtener una variable CMake desde la línea de comando?
- 26. ¿Cómo puedo listar MSI instalado desde la línea de comando?
- 27. Cómo filtrar el resultado de la línea de comando xcodebuild?
- 28. Cómo usar el comando encontrar para encontrar todos los archivos con extensiones de la lista?
- 29. Uso de la línea de comando desde Visual Studio
- 30. Llamar línea de comando desde el programa C
Y en caso de que le gustaría encontrar alguna de las líneas comunes en ambos archivos, puede usar 'comm -12 ab' – voithos
Para crear un tercer archivo c se podría usar, por supuesto,' comm -3 ab> c' – 0x4a6f4672