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

String 如何在bash中比较变量中的两个字符串,string,bash,compare,String,Bash,Compare,我想问一个问题: 我有这样的东西。WEDI_RC是一个txt文件,我想逐行读取它,取第一列并将其存储到变量“name”中。当我回显第四行时,它成功地写入了第一列($1)。然后我想将其与$list进行比较,如果匹配,则将其添加到$list并写入。它应该只写一次每个名字。见下例: 输入: file1 1234 5667 file1 1234 4566 file1 1234 23456 file1 1234 23467 file2 1234 23456 file3 1234 12345 输出: fi

我想问一个问题: 我有这样的东西。WEDI_RC是一个txt文件,我想逐行读取它,取第一列并将其存储到变量“name”中。当我回显第四行时,它成功地写入了第一列($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
list=“”
而read-r行
做
名称=$(echo$行| awk-F'[]''{print$1}')
echo$name
如果[“$name”=“$list”];然后
echo$name
list=$'$list\n$name'
回显“$list”
fi
完成<$WEDI_RC

如果我理解正确,您希望从文件
WEDI\u RC
的第一列获取唯一名称列表。如果是这样的话:

$ awk '{print $1}' WEDI_RC | sort -u
file1
file2
file3
备选案文1 这也可以在不使用排序的情况下完成,尽管不能保证名称的打印顺序:

$ 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

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

previousColumn=“”
而read-r column1 column2 column3;做
如果[“$previousColumn”!=“$column1”];然后
回显“$column1”
previousColumn=$column1
fi
完成<$WEDI_RC

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

 cut -f1 -d" " WEDI_RC | sort | uniq
或者正如其他答案中所建议的那样,排序-u类似于排序| uniq

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