Сравните два файла: строки, существующие в одной, не в другом, по сравнению на один столбец

От USB я не думаю, что однако Вы возможно, если Вы имеете firewire порт и управляете Вами, может загрузиться от этого. Иначе я рекомендовал бы выполнить VMware в Вашем Mac, и можно запустить Linux все, что Вы хотите и имеете снимки для начальной загрузки.

6
26.09.2015, 17:29
4 ответа

join требует, чтобы файлы были предварительно отсортированы, как они находятся в args esample к join), поэтому при необходимости к manintain в последовательности ot вывод этому был бы нужен другой подход. Отметьте, это не пытается сохранить ширину исходного полевого интервала.

join -1 2 -2 2 -v 1 <(sort file1) <(sort file2)

вывод

21 12342 2
21 12349 7
8
27.01.2020, 20:21

Один awk решение:

awk '
    FNR == NR {
        data[ $2 ] = 1;
        next;
    }
    FNR < NR {
        if ( ! ($2 in data) ) {
            print $0;
        }
    }
' file2 file1

Результат:

21  12342   2
21  12349   7
6
27.01.2020, 20:21
  • 1
    Хорошие +1... btw, Вам не нужно FNR < NR, из-за предыдущего next... также, Вам не нужно присвоение значения массива. Определение индекса массива достаточно data[ $2 ];, и runse особенно быстрее без него. –  Peter.O 20.08.2012, 09:34

Используя Python от оболочки удара:

paddy$ python -c 'import sys
with open(sys.argv[2]) as f: file2col2 = {line.split()[1] for line in f}
with open(sys.argv[1]) as f: print("".join(line for line in f 
                                           if line.split()[1] not in file2col2))
' file1.tmp file2.tmp
21  12342   2
21  12349   7

paddy$ 
3
27.01.2020, 20:21

Используя egrep и awk:

egrep -v -f <(awk '{printf "^%s[ ]+%s[ ]+\n", $1, $2}' file2) file1

awk бит внутри <() генерирует шаблоны на основе содержания file2. egrep использование эти шаблоны для соответствия строкам в file1, с -v инвертирование соответствия, печатая только строки, которые не соответствуют.

2
27.01.2020, 20:21

Теги

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