URL: https://www.opennet.dev/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10080
[ Назад ]

Исходное сообщение
"Сравнение файлов с разным количеством столбцов"

Отправлено dsp976 , 03-Мрт-16 10:47 
Добрый день.
Подскажите как можно организовать сравнение двух файлов? Один файл - столбец с данными. Второй файл - первый столбец подобен первому файлу, а второй столбец содержит другие данные.

  файл1                          файл2
a/a/a                           a/a/a 1111
b/b/b                          e/e/e 8888
c/c/c                           c/c/c 3333
...                                ...
z/z/z                           z/z/z 2222


Необходимо сравнить файлы по первому столбцу и на выходе получить различия либо вместе с данными из второго столбца (если в первом файле такой нет), либо без них (если такая строка есть только в первом файле). Я сейчас могу только выбрать первый столбец из второго файла и сравнить его с первым файлом с помощью diff.


Содержание

Сообщения в этом обсуждении
"Сравнение файлов с разным количеством столбцов"
Отправлено fail , 03-Мрт-16 11:27 
> Добрый день.

...
> Необходимо сравнить файлы по первому столбцу и на выходе получить различия либо
> вместе с данными из второго столбца (если в первом файле такой
> нет), либо без них (если такая строка есть только в первом
> файле). Я сейчас могу только выбрать первый столбец из второго файла
> и сравнить его с первым файлом с помощью diff.

http://пoиcкoвик => sed, awk, etc.. 5 минут


"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 11:33 
> http://пoиcкoвик => sed, awk, etc.. 5 минут

пройденный этап, ничего в голову не приходит



"Сравнение файлов с разным количеством столбцов"
Отправлено Andrey Mitrofanov , 03-Мрт-16 14:26 
>> Добрый день.
> ...
>> Необходимо сравнить файлы по первому столбцу и на выходе получить различия либо
>> вместе с данными из второго столбца (если в первом файле такой
>> нет), либо без них (если такая строка есть только в первом
>> файле). Я сейчас могу только выбрать первый столбец из второго файла
>> и сравнить его с первым файлом с помощью diff.
> http://пoиcкoвик => sed, awk, etc.. 5 минут

Вообще-то, man join.

Условия - файлы сортированы, сортированы одинаково и  join согласен с этим. Также возможны варианты (разночтения) с разбиением на поля ("столбцы").

Да, с такой "кухней", кому и awk проще. Но неокрепшие разумы бегут мыслей об авках.


"Сравнение файлов с разным количеством столбцов"
Отправлено Andrey Mitrofanov , 03-Мрт-16 14:27 
> Добрый день.
> Подскажите как можно организовать сравнение двух файлов? Один файл - столбец с
> данными. Второй файл - первый столбец подобен первому файлу, а второй
> столбец содержит другие данные.

И ты уже сравнил:

>Я сейчас могу только выбрать первый столбец из второго файла
> и сравнить его с первым файлом с помощью diff.

Задача решена! Молодейц!


"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 15:20 
>> Добрый день.
>> Подскажите как можно организовать сравнение двух файлов? Один файл - столбец с
>> данными. Второй файл - первый столбец подобен первому файлу, а второй
>> столбец содержит другие данные.
> И ты уже сравнил:
>>Я сейчас могу только выбрать первый столбец из второго файла
>> и сравнить его с первым файлом с помощью diff.
> Задача решена! Молодейц!

Не решена. diff выводит результаты без второго столбца. join отсутствует там где скрипт будет исполняться, в busybox. В man awk я в упор не вижу как можно это реализовать, не хватает опыта его применения.


"Сравнение файлов с разным количеством столбцов"
Отправлено дима , 03-Мрт-16 15:35 
>[оверквотинг удален]
>>> Подскажите как можно организовать сравнение двух файлов? Один файл - столбец с
>>> данными. Второй файл - первый столбец подобен первому файлу, а второй
>>> столбец содержит другие данные.
>> И ты уже сравнил:
>>>Я сейчас могу только выбрать первый столбец из второго файла
>>> и сравнить его с первым файлом с помощью diff.
>> Задача решена! Молодейц!
> Не решена. diff выводит результаты без второго столбца. join отсутствует там где
> скрипт будет исполняться, в busybox. В man awk я в упор
> не вижу как можно это реализовать, не хватает опыта его применения.

echo tt zzz kkk | awk '{ print $1 " " $2 " " $3}'


"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 15:48 
> echo tt zzz kkk | awk '{ print $1 " " $2
> " " $3}'

echo мысли уловил не | awk '{print $3 " " $2 " " $1}'


"Сравнение файлов с разным количеством столбцов"
Отправлено дима , 03-Мрт-16 17:25 
>> echo tt zzz kkk | awk '{ print $1 " " $2
>> " " $3}'
> echo мысли уловил не | awk '{print $3 " " $2 "
> " $1}'

сделать файл_3 только с нужными данными и сравнивать файл_1 и файл_3


"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 19:45 
> сделать файл_3 только с нужными данными и сравнивать файл_1 и файл_3

Я с самого начала делал так:

awk '{print $1}' file2 > file3
diff -u file1 file3

Как и положено, получал различия между ними. Но мне нужны данные всех трех столбцов. Надо чтобы в выводе участвовал и второй столбец из файл2.


"Сравнение файлов с разным количеством столбцов"
Отправлено михалыч , 03-Мрт-16 17:26 
grep и cut есть?

cat OLD
a/a/a
b/b/b
c/c/c
d/d/d
f/f/f
g/g/g
m/m/m
z/z/z

cat NEW
a/a/a 1111
e/e/e 8888
c/c/c 3333
d/d/d 4444
g/g/g 5555
m/m/m 6666
n/n/n 7777
z/z/z 2222


fgrep -vFf OLD NEW
e/e/e 8888
n/n/n 7777

cut -f1 -d " " NEW > TMP
fgrep -vFf TMP OLD
b/b/b
f/f/f



"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 19:35 
> grep и cut есть?

да, есть

>[оверквотинг удален]
> z/z/z
> cat NEW
> a/a/a 1111
> e/e/e 8888
> c/c/c 3333
> d/d/d 4444
> g/g/g 5555
> m/m/m 6666
> n/n/n 7777
> z/z/z 2222

Для чистоты эксперимента создал эти пару файлов OLD и NEW..

> fgrep -vFf OLD NEW
> e/e/e 8888
> n/n/n 7777

..но сначала в параметрах указал свои пару файлов - и все отлично отработало! Показало мне отсутствующую в файл1 строку из файл2, состоящую из двух полей. По-сути, это главное что мне нужно было. Обратная ситуация когда в файле1 находится строка, состоящая из одного поля, отсутствующая в файле2 нужная, но не настолько важная как первая.

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

> cut -f1 -d " " NEW > TMP
> fgrep -vFf TMP OLD
> b/b/b
> f/f/f

Эта команда у меня отработала точно с таким же выводом. Я так понимаю fgrep и grep -F - одно и тоже, поэтому grep -vFf выдал мне те же результаты.

Спасибо)


"Сравнение файлов с разным количеством столбцов"
Отправлено dsp976 , 03-Мрт-16 20:52 
> После этого я повторил команду с файлами OLD и NEW, но у
> меня не появилось никакого вывода. Странно.. сейчас буду разбираться в чем
> причина.

Разобрался, в конце OLD была пустая строка. Сейчас все норм, такой же вывод.


"Сравнение файлов с разным количеством столбцов"
Отправлено pavlinux , 08-Мрт-16 00:52 
через stdout, не?