【问题标题】:How to Scan for conditional matching string and loop if matched如何扫描条件匹配字符串并在匹配时循环
【发布时间】:2021-05-29 08:03:04
【问题描述】:

我有 2 个文件,大小都带有 ';'分隔。

old_file
    Apple;aaa@abc.com
    Banana;bbb@abc.com
    carrot;ccc@abc.com


new File  
Banana;new@abc.com

我正在创建一个 shell 脚本来检查新文件数据并发送电子邮件,然后它会扫描剩余的 大文件中的数据不匹配并分别发送电子邮件。(对于匹配的值,它应该使用新电子邮件)

我的代码


#Variables
name_old=`awk -F ";" '{print $1} {$temp}`; 
email_old=`awk -F ";" '{print $2} {$temp}`;
name_new=`cat 'smallfile' | awk -F ";" '{print $1}'`;
email_new=`cat 'smallfile' | awk -F ";" '{print $2}'`;


///
if #grep -wq $name_new <<< $name_old
[[ "$name_new" == "$name_old" ]]
then
echo "store the matched value email in a variable"
else
echo "store the unmatched value email in a variable"
fi  



sample Output can be stored in a variable.
aaa@abc.com  
new@abc.com--->matching record so updated email  
ccc@abc.com

如果出现任何问题,有人可以查看和更新​​吗? 我是 shell 脚本的新手,但我正在尝试:)

【问题讨论】:

    标签: bash shell unix sh


    【解决方案1】:

    awk 是更合适的工具。

    awk 'BEGIN {FS=OFS=";"} NR==FNR {map[$1]=$2; next} $1 in map {$2=map[$1]} 1' newfile oldfile
    
    Apple;aaa@abc.com
    Banana;new@abc.com
    carrot;ccc@abc.com
    

    【讨论】:

    • 这里的变量是什么..你能解释一下你的解决方案吗?
    • 这是为了生成与sample Output 中相同的输出。您可以阅读一些基本的 awk 教程。
    • 我可以用变量代替文件吗?
    • 这些变量包含什么?您已经在文件中有数据,为什么不直接从文件中使用?
    • 这些文件是为了树立一个理解的例子。我已经在变量中提取了所需的数据(在我的代码中),所以我只需要循环输入,以便匹配的数据将具有更新的电子邮件 ID 和不匹配数据将使用原始ID。
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    相关资源
    最近更新 更多