두 파일 사이의 문자열 검색

두 파일 사이의 문자열 검색

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=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변경된 경우 업데이트하세요.

편집하다:설문지처럼 보이는 경우에만 사용됩니다.

관련 정보