将数组中的单词逐行匹配到单独的文件

将数组中的单词逐行匹配到单独的文件

这是我的输入数据的示例:

$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但标题是相同的)。

答案1

我会从你的第一个文件中获取所有标题,例如

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 中的每一行,检查并打印 $input 中 $csv2 中的记录

相关内容