Bash while循环比较两个文件并打印行号

时间:2015-03-19 23:35:17

标签: bash while-loop compare line-numbers

我有file1:

A
B
C
D

我有文件2:

B
C

我想使用while循环读取两个文件来比较它们,并打印出任何匹配行的file1的行号。

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命令

请有人让我知道我哪里出错了。感谢。

2 个答案:

答案 0 :(得分:0)

此代码中存在很多错误,但要回答这个问题,您获得B command not found的原因是因为........我们使用[]而不是{ bash中的{1}}。

其他错误包括:

()

答案 1 :(得分: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打印表达式与文件内容匹配的次数。