Как упорядочить и заполнить недостающие поля при чтении двух файлов в bash

La respuesta de AlexP es excelente, pero si está dispuesto a instalar algún software adicional, hay una opción aún más fácil.

Busque desintoxicación . Es un programa simple muerto -empaquetado por la mayoría de las distribuciones que hace casi exactamente lo mismo que el script de shell publicado por AlexP, mientras itera automáticamente a través de toda la carpeta en la que se ejecuta. Por la pura sencillez de uso,está en la lista razonablemente corta de programas que instalo en casi todos los sistemas Linux que configuro.

Como otra alternativa más para los archivos en un solo directorio, renameutils le permitirá realizar cambios de nombre por lotes de forma rápida y sencilla desde la terminal utilizando su editor de texto preferido. Cuando se usa con un editor de estilo Vi o EMACS, proporciona una manera razonablemente fácil de realizar transformaciones por lotes complejas en nombres de archivo utilizando el editor integrado -en soporte de expresiones regulares.

0
19.06.2019, 17:43
2 ответа

Возможно, diffтогда sort может пригодиться здесь.

Для файлов A.txtи B.txtс соответствующими сопутствующими файлами A1.txtи B1.txt, уже настроенными, как в вашем примере, выполните:

diff --unchanged-line-format= --old-line-format= --new-line-format='%l,"  "'%c\'\\12\' A1.txt B1.txt | sort -st, -k 1,3 A.txt -

и:

diff --unchanged-line-format= --old-line-format= --new-line-format='%l,"  "'%c\'\\12\' B1.txt A1.txt | sort -st, -k 1,3 B.txt -

Это должно дать результат, который вы описали.

0
28.01.2020, 03:33
grep -vFf B.txt A.txt | sed 's/".*"/" "/' |  sort -st, -k1,3 - B.txt

результат (B1.txt):

10,1,1," "
10,1,1,"ABC1"
10,1,2,"S1"
10,1,2,"ABC"
10,1,3,"baba"
10,2,1," "
10,2,1,"asd"
10,2,2,"S3"
10,2,2,"dkkd"
10,2,3," "
10,2,4,"bokaj"

Первая строка отличается от вашего примера, но я думаю, что она должна быть там, так как ABCотличается от ABC1.

0
28.01.2020, 03:33

Теги

Похожие вопросы