От USB я не думаю, что однако Вы возможно, если Вы имеете firewire порт и управляете Вами, может загрузиться от этого. Иначе я рекомендовал бы выполнить VMware в Вашем Mac, и можно запустить Linux все, что Вы хотите и имеете снимки для начальной загрузки.
join
требует, чтобы файлы были предварительно отсортированы, как они находятся в args esample к join
), поэтому при необходимости к manintain в последовательности ot вывод этому был бы нужен другой подход. Отметьте, это не пытается сохранить ширину исходного полевого интервала.
join -1 2 -2 2 -v 1 <(sort file1) <(sort file2)
вывод
21 12342 2
21 12349 7
Один awk
решение:
awk '
FNR == NR {
data[ $2 ] = 1;
next;
}
FNR < NR {
if ( ! ($2 in data) ) {
print $0;
}
}
' file2 file1
Результат:
21 12342 2
21 12349 7
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$
Используя egrep
и awk
:
egrep -v -f <(awk '{printf "^%s[ ]+%s[ ]+\n", $1, $2}' file2) file1
awk
бит внутри <()
генерирует шаблоны на основе содержания file2
. egrep
использование эти шаблоны для соответствия строкам в file1
, с -v
инвертирование соответствия, печатая только строки, которые не соответствуют.