Bash shell:比较字符串时的非法数字

时间:2013-09-08 17:14:03

标签: bash shell

我在进行字符串比较时遇到错误。基本上我从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

3 个答案:

答案 0 :(得分:7)

您说您正在进行字符串比较,但这将是=,运算符-eq专门用于整数比较。

答案 1 :(得分:1)

正如already mentioned by Ben那样,您使用的是-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"

但是,as already stated by anubhava in the comments这种方法效率非常低。

答案 2 :(得分:0)

符合您compare string,因此您使用===运算符。编辑后的行是if [ "$slave_col2" = "$master_col2" ]; then