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=ON
file2には存在せず、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
された場合は更新してください。
編集する:アンケートのように見える場合にのみ使用されます。