以下は私の入力データの例です。
$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
、.NETファイルのヘッダーと一致する行のみを知らせたいと思いますcsv2
。したがって、最初のヘッダーのみにある場合、出力は次のようになりますcsv2
。
Matching lines:
$9.99,Titan the Power,www.otherwebsite.com,13357
$9.99,Titan the Power,www.example.com,565654
上記のように比較できるように、元の行と一致する行を出力として表示したいと思います(他のフィールド値の間には若干の違いがありますが、$input
ヘッダ$csv2
は同じです)。
ベストアンサー1
私は次の最初のファイルからすべてのヘッダを取得します
interesting_titles=$(cat $input |cut -d, -f2)
次に、これを使用して2番目のファイルからこれらのヘッダーを取得します。
grep -F "$interesting_titles" $csv2
grepによって返されたすべての項目は一致します。
1行に短縮できます。
grep -F "$(cat $input |cut -d, -f2)" $csv2
2 つのファイルを並べて出力するには、次の 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の各行を繰り返し、$inputの$csv2にあるレコードを確認して印刷します。