在两个文件之间搜索字符串

在两个文件之间搜索字符串

我有两个文件,file1 和 file2。

file1中的内容是:

ABC_DEC_EDC=ON
WER_QSD_RCS=ON

文件2的内容是:

TRD_OIY_REC=ON
YUH_PON_UYT=ON
WER_QSD_RCS=OFF

我必须逐行检查 file2 中的内容。

第一的

if ABC_DEC_EDC=ONfile2 中不存在,然后添加到 file2。

第二

在第一个文件中,SAX_IUY_TRE=OFFOFF; 但在文件 2 中,SAX_IUY_TRE=ONON;在这种情况下,我只想更新文件OFF

例子:SAX_IUY_TRE=OFF

所有更新仅发生在 file2 中。

输出应该是:

ABC_DEC_EDC=ON
WER_QSD_RCS=ON
    WER_RTC_YTC=ON
WER_QSD_RCS=OFF

答案1

sh执行。

#!/bin/sh

while read -r LINE
do
    setting=$(echo $LINE | sed 's/=.*//')
    switch=$(echo $LINE | sed 's/.*=//')

    found=$(grep "$setting" file2)
    if [ -z "$found" ]
    then
        echo $LINE >> file2
    else
        if [ "$switch" != "$(echo $found | sed 's/.*=//')" ]
        then
            sed -i "s/\($setting\).*/\1=$switch/" file2
        fi
    fi
done < file1

该脚本将翻转在两个不匹配的文件中找到的设置值。

答案2

它可以在 bash 中制作。

#! /bin/bash
file1="/tmp/output1.txt"
file2="/tmp/livefile1.txt"
cat $file1 | while read LINE; do
    KEY=${LINE%=*}
    CURRENT=$(grep $KEY= $file2)
    if [ -z "$CURRENT" ]; then  # if $CURRENT is empty
        echo NOT found $KEY in $file2, add it
        echo $LINE >> $file2
    else
        if [ "$LINE" != "$CURRENT" ]; then
            echo Found $KEY in $file2 and state has changed
            sed -i -e "s/^$KEY=.*\$/$LINE/" $file2
        fi
    fi
done

并运行命令:

./update.bash

输出到屏幕:

NOT found ABC_DEC_EDC in /tmp/livefile1.txt, add it
Found WER_QSD_RCS in /tmp/livefile1.txt and state has changed
NOT found ZXC_POY_YTR in /tmp/livefile1.txt, add it
NOT found ZXC_OPI_GHF in /tmp/livefile1.txt, add it
Found SAX_IUY_TRE in /tmp/livefile1.txt and state has changed

该脚本读取所有行$file1。 KEY 设置为=关键之前的部分。然后grep搜索key,$file2如果没有找到就添加。如果找到密钥,则检查状态是否已更改,sed如果已更改则更新它。

编辑:改成看起来更像调查问卷才会用到的。

相关内容