【问题标题】:How to compare two strings in variables in bash如何在bash中比较变量中的两个字符串
【发布时间】:2015-05-22 00:03:40
【问题描述】:

我想问一个问题: 我有这样的东西。 WEDI_RC 是一个 txt 文件,我想逐行读取它,取第一列并将其存储到变量“名称”中。当我回显第 4 行时,它成功写入第一列 ($1)。然后我想将它与 $list 进行比较,如果匹配,则将其添加到 $list 并写入。每个名字应该只写一次。请参见下面的示例:

输入:

file1 1234 5667
file1 1234 4566
file1 1234 23456
file1 1234 23467
file2 1234 23456
file3 1234 12345

输出:

file1
file2
file3

我的代码:

list=""
while read -r line      
        do 
            name=$(echo $line | awk -F'[ ]' '{print $1}')
            echo $name 
            if [ "$name" = "$list" ]; then
                echo $name
                list=$'$list\n$name'
                echo "$list"
            fi
    done < $WEDI_RC

【问题讨论】:

    标签: string bash compare


    【解决方案1】:

    如果我理解正确,您想从文件WEDI_RC 的第一列中获取唯一名称列表。如果是这样的话:

    $ awk '{print $1}' WEDI_RC | sort -u
    file1
    file2
    file3
    

    备选方案 1

    这也可以在不使用sort 的情况下完成,尽管不能保证名称的打印顺序:

    $ awk '{a[$1]=1} END{for (name in a)print name}' WEDI_RC
    file1
    file2
    file3
    

    备选方案 2

    如果事先知道WEDI_RC文件中的名字是排序的,那么另一种做法是:

    $ awk 'prior!=$1{print $1} {prior=$1}' WEDI_RC
    file1
    file2
    file3
    

    【讨论】:

      【解决方案2】:

      如果我理解您的要求,您想在第一列显示不同的名称,您可以这样做:

      previousColumn=""
      
      while read -r column1 column2 column3; do
          if [ "$previousColumn" != "$column1" ]; then 
              echo "$column1"
              previousColumn=$column1
          fi
      done < $WEDI_RC
      

      【讨论】:

        【解决方案3】:

        回到基础,您应该使用cut -f1 -d" " 来获取由空格字符分隔的第一列,sort 对结果进行排序,uniq 来显示 uniq 结果

         cut -f1 -d" " WEDI_RC | sort | uniq
        

        或者在其他答案中建议sort -u类似于sort | uniq

         cut -f1 -d" " WEDI_RC | sort -u
        

        【讨论】:

          猜你喜欢
          • 2015-12-07
          • 1970-01-01
          • 2016-06-26
          • 1970-01-01
          • 1970-01-01
          • 2019-12-28
          • 2011-01-15
          • 2014-04-21
          相关资源
          最近更新 更多