инструмент ack.pl и флаги ack.pl

Это не решает Вашу проблему, а скорее показывает Вам почему join май на имя кажется, что оно должно работать в этой конкретной ситуации, но не делает. Я потратил изрядное количество времени, пытаясь вызвать join работать в подобной проблеме к Вашему на этом сайте, названном: Присоединение к двум файлам с уникальным идентификатором.

1-й подход

Подход к решению Вашего использования задач join прошел бы примерно так:

$ join -a1 -1 1 -2 1 -o 1.1 1.2 1.3 1.4 2.2 2.3 <(sort file_1.txt) <(sort file_2.txt)
R10 C1 C2 C3  
R1 C1 C2 C3  
R2 C1 C2 C3  
R3 C1 C2 C3  
R4 C1 C2 C3 C4_new C5_new
R5 C1 C2 C3  
R6 C1 C2 C3 C4_new C5_new
R7 C1 C2 C3 C4_new C5_new
R8 C1 C2 C3  
R9 C1 C2 C3 C4_new C5_new

Как видете join потребности поместить Ваши файлы в отсортированную форму, таким образом, для начинающих, если первоначальный заказ Ваших файлов важен, эта опция могла бы создать проблемы там.

Дополнительно нет никакого способа сказать join условно распечатать значение столбца из одного из файлов или другого или на основе его значения или на основе присутствия значения или отсутствия значения.

2-й подход

Другой подход с join могло бы быть это:

$ join -a1 -1 1 -2 1  <(sort file_1.txt) <(sort file_2.txt)
R10 C1 C2 C3 C4 C5
R1 C1 C2 C3 C4 C5
R2 C1 C2 C3 C4 C5
R3 C1 C2 C3 C4 C5
R4 C1 C2 C3 C4 C5 C4_new C5_new
R5 C1 C2 C3 C4 C5
R6 C1 C2 C3 C4 C5 C4_new C5_new
R7 C1 C2 C3 C4 C5 C4_new C5_new
R8 C1 C2 C3 C4 C5
R9 C1 C2 C3 C4 C5 C4_new C5_new

Снова это близко к тому, что Вы хотите, но не позволяет, чтобы Вы использовали любую условную логику для печати столбца из одного файла или другого.

3-й подход

Эти работы, но мы должны были сломаться и получить некоторую внешнюю помощь от awk опустить запаздывающие столбцы, которые перемещены, когда их дубликаты существуют в file_2.txt.

$ join -a1 -1 1 -2 1 -o 1.1 1.2 1.3 1.4 2.2 2.3 1.5 1.6 1.7 <(sort file_1.txt) <(sort file_2.txt) | awk '{$7=$8=""}1'
R10 C1 C2 C3 C4 C5  
R1 C1 C2 C3 C4 C5  
R2 C1 C2 C3 C4 C5  
R3 C1 C2 C3 C4 C5  
R4 C1 C2 C3 C4_new C5_new  
R5 C1 C2 C3 C4 C5  
R6 C1 C2 C3 C4_new C5_new  
R7 C1 C2 C3 C4_new C5_new  
R8 C1 C2 C3 C4 C5  
R9 C1 C2 C3 C4_new C5_new  

Использование просто присоединяется?

Соединение имеет очень узкую нишу, где это может быть полезный инструмент. Для типа замены проблемы, которая Ваш является, больше встроенное с, инструмент такой как awk, perl, или sed было бы лучшее соответствие.

3
10.03.2015, 22:44
1 ответ

Вы уверены, что это « , который вызывает проблему? Как я объяснил в своем ответе на ваш предыдущий вопрос , « L » означает, что Ваша операционная система и файловая система поддерживают обязательные блокировки файлов, И обязательный блокировку файлов включен для этого файла. Я сомневаюсь, что это совпадение, что оба файла вы даете в качестве примеров (В этом вопросе и предыдущий) есть имена, которые заканчиваются _Lock . Эти файлы, вероятно, - угадайте, что? - заблокирован! Это может предотвратить ACK (или любую другую программу) от чтения их.
(вышеизложенное является ответ на вопрос: «Почему ACK Прочитайте эти файлы?», Что, я понимаю, вы не спрашивали.)

Поиск всех файлов, которые имеют бит в режиме « L , используя команду

find /etc -perm -2000 ! -perm -010

(которую я представил в , мой ответ к вашему предыдущему вопросу). Посмотрите, имеют ли все файлы имена, которые заканчиваются _Lock . Затем делайте

find /etc -name "*_lock" –ls

, чтобы убедиться, что все _lock файлы имеют набор битов режима « l . Если есть однозначное соответствие (или, в целом, если нет _lock файлы, которые вам нужно поискать), Исключите их из вашего поиска по шаблону имени файла.

У меня нет доступа к копии ACK , чтобы проверить, но, но, Из документации, Похоже, вы можете сделать это с - IGNORE-File = "Match: /.*_ lock /" , или что-то вроде того.

1
27.01.2020, 21:31

Теги

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