2012-04-25 2 views
2

У меня есть два файла file1 - это файл запроса, а file2 - это вид словаря, каждый из 1 столбца. Я хочу проверить, присутствует ли элемент file1 в файле2, он должен дать 1 else 0 в качестве вывода.если else и awk ... необходима коррекция в моей команде

Это то, что я делаю:

#!/bin/bash 
for i in `cat file1 ` 
    do 
    cat file2 | awk '{ if ($1=="'$i'") print 1 ; else 0 }'>>output 
    done 

Пожалуйста, дайте свои предложения по улучшению команд,

Спасибо вам

+1

Похоже Grep будет лучше подходит, чем AWK для этой задачи. Если у вас есть 'fgrep', это точная задача, для которой она была разработана. –

+0

не могли бы вы дать ему две линейные демо-версии? – Angelo

+2

Вы не можете сравнить их два с 'diff'? – ant

ответ

3

один путь:

Содержание file1:

monday 
tuesday 
wednesday 
thursday 
friday 
saturday 
sunday 

Содержание file2:

tuesday 
saturday 

Выполнить следующую команду: awk

awk 'FNR == NR { f2[ $1 ] = 1; next } FNR < NR { print (($1 in f2) ? 1 : 0) >"output" }' file2 file1 

содержания output:

0 
1 
0 
0 
0 
1 
0 
5

Похоже, весь сценарий сводится к:

fgrep -f file1 file2 > output 

Я должен добавить, что если у вас нет fgrep, grep -F, как правило, то же самое.

fgrep (или, как правило, grep -F) обычно реализуется с помощью алгоритма строка соответствия Ахо-Corisack, так что это нормально совсем немного быстрее, чем при использовании grep неоднократно. Единственное, что нужно помнить (что не является полностью здесь, но кажется вероятным) заключается в том, что f в fgrep означает fixed - он соответствует любому из нескольких альтернативных фиксированных строк быстро, но он не REES - каждая строка просто соответствует буквально.

Если вам нужно RE соответствия, вы все еще можете использовать -f вариант с Grep, так вы получите:

grep -f file1 file2 > output 

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

  • Нет связанных вопросов^_^