Сравнение файлов в командной строке unix - PullRequest
4 голосов
/ 04 июня 2009

Предположим, у меня есть два файла, A и B, и это lengthOf (A)

Если я сделаю «diff A B», на выходе будут все «лишние вещи» в B-файле, которые не попадают в точку; Мне все равно, что еще может быть в файле B.

Если я выполняю «comm A B», то я должен визуально проверить, что в столбце ничего не отображается «только в A». Это может быть сложно, когда lengthOf (B) >> lengthOf (A), хотя я полагаю, что его можно приручить с помощью grep.

Ответы [ 5 ]

5 голосов
/ 04 июня 2009

Это выглядит намного лучше, чем создание временного файла:

SIZE=`stat -c %s filea`
cmp -s -n $SIZE filea fileb # -s for silence

Проверьте состояние выхода, чтобы увидеть, действительно ли первые байты этих файлов равны.

Обновление: согласно запросу xk0der, вот более длинный пример:

wormhole:tmp admp$ echo -n "fooa" > one # -n to supress newline
wormhole:tmp admp$ echo -n "foobc" > two
wormhole:tmp admp$ SIZE=`stat -c %s one`
wormhole:tmp admp$ echo $SIZE
4
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal"
not equal
wormhole:tmp admp$ echo -n "fooac" > two # first 4 bytes are equal now
wormhole:tmp admp$ (cmp -s -n $SIZE one two && echo "equal") || echo "not equal"
equal

Кроме того, в MacOS X вы должны использовать:

SIZE=`stat -f %z filename`
3 голосов
/ 04 июня 2009

Используйте head -c, чтобы указать количество байтов для каждого файла, а затем сравнить их.

Я полагаю, что для этого нужно создать хотя бы один временный файл, но в любом случае приветствую любые комментарии

1 голос
/ 04 июня 2009
head -c`stat -c %s filea` fileb |diff -q filea -
1 голос
/ 04 июня 2009

Может быть, создать временный файл с соответствующим содержанием b длиной a?

Немного зла, но:

SIZE=`stat -c %s filea`
head -c$SIZE fileb >tempfile
diff filea tempfile
EXIT=$?
rm tempfile
exit $EXIT
0 голосов
/ 04 июня 2009

Напишите собственный сценарий awk для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...