Учитывая два файла, я хочу написать сценарий оболочки, который читает каждую строку из файла file1 и проверяет, есть ли он в файле file2. Если строка не найдена в file2, она должна сохранить ее, скажем, в таблице TAB1. Кроме того, если в файле 2 есть какие-либо дополнительные строки, которых нет в файле 2, следует сохранить их, скажем, в таблице TAB2.

Файлы могут содержать слова со словами или что угодно. Например :

файл1:

Hi!
1234
5678
1111
hello

file2:

1111
5678
1234
Hi!
hellothere

В этом случае должно быть "привет" в TAB1 и "привет" в TAB2

Если два файла равны, я хочу вернуть "файлы равны" эхо или что-то в этом роде.

Как я могу это сделать? Я пытался экспериментировать с diff, но безуспешно.

заранее спасибо

1 ответ1

0

Сначала вам нужно отсортировать каждый файл. Тогда вам нужно использовать comm . Наконец, вы можете извлечь столбцы, которые производит comm используя awk . Ну как то так.

#! /bin/bash
sort $1 > $1.sorted
sort $2 > $2.sorted
comm -3 $1.sorted $2.sorted > columns
if [ -s columns ]; then
  TAB1="$(awk '{ print $1 }' < columns)"
  TAB2="$(awk '{ print $2 }' < columns)"
  # do something with TAB1 and TAB2
else
  echo $1 and $2 contain the same data
fi

Вы бы назвали этот скрипт так:

./myscript file1 file2

после выполнения сценария с помощью chmod .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .