簡體   English   中英

如何在bash中比較變量中的兩個字符串

[英]How to compare two strings in variables in bash

我想問一個問題:我有這樣的事情。 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

如果我理解正確,則希望從文件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

如果我理解您的要求,則希望顯示在第一列中顯示的不同名稱,可以使用以下方法進行操作:

previousColumn=""

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

回到基礎知識,您應該使用cut -f1 -d" "獲取以空格字符分隔的第一列, sort結果進行sort以排序, sort uniq進行排序以顯示uniq結果

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

或其他答案中建議的sort -usort | uniq類似sort | uniq sort | uniq

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM