2016-07-14 2 views
3

Я хочу сделать очень простую вещь. У меня есть два файла следующим образом:diff на столбцах двух файлов в оболочке

FILE 1: 
A s1 p1 
B s2 p2 
C s3 p3 

FILE2: 
B s4 p4 
A s1 p1 
C s6 p6 

Я хочу, чтобы извлечь первый и третий столбец как из файла и распечатать дифф этого файла. Один простой способ - создать промежуточные файлы с cut -f1,3 обоих файлов и сделать diff. То, что именно я хочу, чтобы мой результат был. Но я не хочу создавать промежуточный файл. Любой простой лайнер для этого.

Еще одна вещь: оба файла НЕ отсортированы, поэтому невозможно напрямую использовать соединение.

ответ

1

Использование [ process substitution ]

diff -y <(awk '{print $1,$3}' file1) <(awk '{print $1,$3}' file2) 

должны это сделать. Примечание -y вариант с diff предназначен для бок о бок o/p.

4

Попробуйте это:

diff <(cut -f1,3 file1) <(cut -f1,3 file2) 

Ссылки:

Compare two files line by line and generate the difference in another file

+2

да, это называется процесс замещения в Баш, как размещены sjsam; в оболочке рыбы вы используете 'psub':' diff (cut -f1,3 file1 | psub) (cut -f1,3 file2 | psub) '(и у вас еще нет'> (...) ') – xealits

+1

Хороший вопрос о «рыбе»;) – sjsam

Смежные вопросы