2015-03-19 2 views
1

У меня есть file1:Bash в то время как петля для сравнения двух файлов и печать номер строки

A 
B 
C 
D 

У меня есть file2:

B 
C 

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

COUNT=0 
while read line 
do 
    flag = 0 
    while read line2 
    do 
    COUNT=$(($COUNT + 1)) 
     if ("$line" = "$line2") 
     then 
      flag = 1 
     fi 
    done < file1 
    if (flag -eq 1) 
    then 
     echo $COUNT > file3 
    fi 
done < file2 

Однако я получаю сообщение об ошибке: Команда B не найдена

Пожалуйста, может кто-то дайте мне знать, где я не так. Благодарю.

+0

Хотите ли вы подсчитать, сколько раз повторяется строка 'file1' в' file2'? – higuaro

+0

'grep -f file2 -n file1'? – anishsane

ответ

0

В этом коде есть довольно много ошибок, но, чтобы ответить на вопрос, причина, по которой вы получаете B command not found, объясняется тем, что ........ мы используем [], а не () в bash.

другие ошибки включают в себя:

COUNT=0 
while read line 
do 
    flag=0   # no space between flag and = 
    while read line2 
    do 
    COUNT=$(($COUNT + 1)) 
    echo $line 
    echo $line2 

     if [ "_$line" = "_$line2" ] 
     then 
      flag=1   #no space again 
     fi 
    done < file1 
    if [ $flag -eq 1 ]  # use $flag rather than flag 
    then 
     echo $COUNT > file3 
    fi 
done < file2 
0

Вы также могли бы добиться того, что вы ищете с помощью grep -c так:

#!/bin/bash 

# Clean file3 
>file3 

while read line; do 
    COUNT=$(grep -c "^$line$" file2) 

    if [ $COUNT -ge 1 ]; then 
     $COUNT >> file3 
    fi 
done < file1 

grep -c печатает число раз выражение соответствует содержимому файла.

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