1

进行字符串比较时出现错误。基本上我从 2 个不同的文件中提取名称并尝试比较它们。它似乎不起作用。有什么建议吗?

 while read slave_line
 do
      slave_col1=`echo $slave_line | cut -d " " -f2`
      slave_col2=`echo $slave_line | cut -d " " -f3`
      slave_col=`echo $slave_line | cut -d " " -f1`

      while read line
      do
          master_col1=`echo $line | cut -d " " -f2`
          master_col2=`echo $line | cut -d " " -f3`
          if [ "$slave_col2" -eq  "$master_col2" ]; then
              echo $slave_col2 $master_col2 $slave_line $line
              echo $slave_line $line>> $3
       fi
       done < $2
 done < $1
4

3 回答 3

7

你说你正在做一个字符串比较,但那是=,运算符-eq专门用于整数比较。

于 2013-09-08T17:20:24.607 回答
1

正如本已经提到的那样,您正在使用-eq而不是,=我不认为您真的在比较数字。

这是您脚本的更好版本。我已经使用read而不是,cut并且我还修复了您的引用。

#!/bin/bash

while read -r slave_col slave_col1 slave_col2 _
do
    while read -r _ master_col1 master_col2 _
    do
        if [ "$slave_col2" = "$master_col2" ]; then
            echo "$slave_col2 $master_col2 $slave_line $line"
            echo "$slave_line $line" >> "$3"
        fi
    done < "$2"
done < "$1"

但是,正如 anubhava 在评论中已经指出的那样,这种方法效率很低。

于 2013-09-08T19:22:34.477 回答
0

在线比较 string,因此您使用=or==运算符。编辑后的行是if [ "$slave_col2" = "$master_col2" ]; then.

于 2013-09-08T17:17:48.997 回答