2つのファイル間の文字列の検索

2つのファイル間の文字列の検索

file1とfile2という2つのファイルがあります。

file1の内容は次のとおりです。

ABC_DEC_EDC=ON
WER_QSD_RCS=ON

ファイル2の内容は次のとおりです。

TRD_OIY_REC=ON
YUH_PON_UYT=ON
WER_QSD_RCS=OFF

file2の内容を1行ずつ確認する必要があります。

最初

if ABC_DEC_EDC=ONfile2には存在せず、file2に追加されます。

第二

最初のファイルに;SAX_IUY_TRE=OFFがありますが、OFFファイル2には;SAX_IUY_TRE=ONがあります。ONこの場合、ファイルを更新したいと思います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つのファイルで見つかった設定値を反転します。

答え2

バッシュで作ることができます。

#! /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キーを検索して$file2見つからない場合は追加してください。キーが見つかったら、ステータスが変更されたことを確認し、変更sedされた場合は更新してください。

編集する:アンケートのように見える場合にのみ使用されます。

関連情報