Linux
將數組中的單詞逐行匹配到單獨的文件
這是我的輸入數據範例:
$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
的行可能以不同的順序並包含我不感興趣的其他內容。我希望腳本僅通知我$f2
在csv2
. 因此,如果只有第一個標題出現在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