Допустим, у меня есть два файла, как показано ниже:
file1
a 23
b 34
c 47
file2
a justin_beiber_sucks
b segmentation fault
c jackson
d nop
Теперь я хочу получить различие первого столбца двух файлов. Я делаю это сейчас как
$cat file1 awk '{print $1}'> f1
$cat file2 awk '{print $1}'> f2
$diff -u f1 f2
Но такой подход кажется отсталым. Есть какой-нибудь хитрый подход?
Проблема в том, что я всегда смотрю pipe
s как одномерная вещь, но здесь ее двумерная. Я имею в виду, что ввод в diff должен поступать одновременно из двух разных источников.
отправной точкой может быть сценарий awk, который прочитает оба файла, выполнит фильтрацию и сохранит результат во временном ассоциативном массиве, затем он вызовет diff и предоставит свои входные данные.
Пытаться:
diff -u <(awk '{print $1}' file-one) <(awk '{print $1}' file-two)
Скорее всего, что join
буду делать то, что хочешь:
join <(sort file1) <(sort file2)
Но поскольку вы не говорите, чего на самом деле пытаетесь достичь, трудно определить, какие варианты могут быть уместными.