2009-10-14 3 views
0

как мы можем сравнивать строки в двух файлах с помощью сценария оболочки.Сравнивает строки в двух файлах

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

+1

.. это зависит от того, как вы хотите сравнить и что вы ожидаете от вывода? различия или те же строки, или количество строк и т. д., – vpram86

+0

С добавленным комментарием он выглядит как вариант использования для 'grep'. –

+0

Домашние дубликаты: http://stackoverflow.com/questions/1559387/script-unix-compare и http://stackoverflow.com/questions/1543422/how-to-compare-two-files-in-shell-script и http://stackoverflow.com/questions/1544058/how-to-replace-a-line-in-the-same-file-by-sed-in-unix-shell-scripting –

ответ

2

Я не уверен, что именно то, что вы просите, но как насчет:

grep -n -v "`head -1 FILE1`" FILE2 

Это даст вам пронумерованные строки в ФАЙЛЕ2, которые не содержат 1-ю строчку в ФАЙЛА1.

+0

Или опустите '-v', если вам нужны строки, соответствующие первой строке из FILE1. – steveha

0
#!/bin/sh 
diff $1 $2 
+0

Я хочу сравнить строку с одним файлом с other.diff даст мне все различия в двух файлах за раз. Мне нужна строка в первом файле для сравнения со всеми строками во втором файле и получить общие строки в качестве вывода. с номерами строк, где строки присутствуют во втором файле. – Vijay

+0

Было бы хорошо сказать об этом в вашем вопросе. –

0

grep -n - это инструмент для использования в вашем случае. В качестве шаблона вы помещаете строку в первый файл, который вы хотите найти во втором. Сделайте свой шаблон с помощью^и закончите с $ и поставьте кавычки вокруг него.

0

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

Я думаю, что это близко.

#!/bin/sh 
REF='a.txt' 
TARGET='b.txt' 

cat $REF | while read line 
do 
    echo "line: $line" 
    echo '===========' 
    grep -n $line $TARGET 
done 
0

Это не элегантный на всех, но это просто

позволяют filea быть:

foo 
bar 
baz 
qux 
xyz 
abc 

и fileb быть:

aaa 
bar 
bbb 
baz 
qux 
xxx 
foo 

Тогда:

while read a ; do 
    grep -n "^${a}$" fileb ; 
done < filea 

Выведет:

7:foo 
2:bar 
4:baz 
5:qux 
+0

Теперь вы сделали домашнее задание для него. –

0

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

это дает общие строки в обоих файлах. комм -12 < (сортировка first.txt | уник) < (вид second.txt | уник)

Синтаксис комм [опции] ... file1 file2

Опции -1 Подавить линии, уникальные для file1 -2 подавляет линии, уникальные для файла2 -3 подавляет линии, которые появляются в обоих файлах

Имя файла `- 'означает стандартный ввод.

1
comm -12 file1 file2 

будут показаны линии, общие для обоих file1 и file2

0

вставьте следующий код в файл с именем intersect.sh

while read line 
do 
    grep -n "^${line}$" $2; 
done < $1 

затем убедитесь, что у вас есть разрешения на выполнение файла

chmod 777 intersect.sh 

затем выполните эту команду, заменив имена ваших двух файлов

./intersect.sh nameOfLongerFile nameOfShorterFile 
Смежные вопросы