Linux

將數組中的單詞逐行匹配到單獨的文件

  • June 9, 2021

這是我的輸入數據範例:

$9.99,Titan the Power,www.example.com,565654
$15.99,Conan The Barbarian,www.sure.com,565438
$1.99,Julia Cesar,www.bfg.com,69722

我編寫了這段程式碼,以便從輸入文件創建一個數組,然後將標題與$f2變數隔離開來。

#!/bin/bash
input="/home/test/Documents/Scripts/test.csv"

readarray myarray < $input    

# Sends all of arrays into while loop which read each line by line
echo "${myarray[@]}" | while IFS=',' read -r f1 f2 f3 f4
do
 # echo field 2 of each line
 echo $f2 #This displays the title of each product (just for testing)
done

現在我想將每個標題 ( $f2) 與另一個文件 ( $csv2) 進行比較,看看是否有任何正匹配。

csv2:

$1.99,The Power of Now,www.dvd.com,45674
$9.99,Titan the Power,www.otherwebsite.com,13357
$2.99,The incredible Hulk,www.purchase.com,13956

我知道我可以將文件與以下內容進行比較:

if [ "$f2" == "$csv2" ]; then
 echo "match"
fi

上面的程式碼與整個內容匹配,並且行中csv2的行可能以不同的順序並包含我不感興趣的其他內容。我希望腳本僅通知我$f2csv2. 因此,如果只有第一個標題出現在csv2

Matching lines:

$9.99,Titan the Power,www.otherwebsite.com,13357
$9.99,Titan the Power,www.example.com,565654

我希望將原始行和匹配行顯示為輸出,以便我可以比較它們,就像上面一樣(注意其他欄位值之間略有不同$input$csv2但標題是相同的)。

我會從您的第一個文件中獲取所有標題,例如

interesting_titles=$(cat $input |cut -d, -f2)

然後用它來grep你的第二個文件以獲得這些標題

grep -F "$interesting_titles" $csv2

grep 返回的任何內容都是匹配項。

您可以將其縮短為單線

grep -F "$(cat $input |cut -d, -f2)" $csv2

如果您想要兩個文件的輸出並排,您可能需要一個 for 循環,例如….

cat $input |cut -d, -f2 | while read t; do
 grep -i "$t" $csv2
 if [ $? -eq 0 ];then
   grep -i "$t" $input
 fi
done

這將遍歷每一行 $ input, check for and print that record in $ $輸入中的csv2

引用自:https://unix.stackexchange.com/questions/282737