如何在bash中比较变量中的两个字符串

时间:2015-03-19 00:13:06

标签: string bash compare

我想问一个问题: 我有类似的东西。 WEDI_RC是一个txt文件,我想逐行读取它,取第一列并将其存储到变量“name”。当我回显第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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果我理解了您的要求,您希望显示第一列中显示的不同名称,您可以使用以下内容执行此操作:

previousColumn=""

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

答案 2 :(得分:0)

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

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

或按照其他答案[{1}}中的建议与sort -u

类似
sort | uniq