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=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
배쉬로 만들 수 있습니다.
#! /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
변경된 경우 업데이트하세요.
편집하다:설문지처럼 보이는 경우에만 사용됩니다.