파일에서 패턴 grep 검색

파일에서 패턴 grep 검색

내 출력 diff형식은 다음과 같습니다.

$ curr_dt=$(date +%m_%d_%Y)
$ echo $curr_dt
$ diff -q /POC/$curr_dt/DDL/ /POC/Backup/DDL/
Only in /POC/Backup/DDL/: comp1.txt
Only in /POC/Backup/DDL/: comp.txt
Only in /POC/Backup/DDL/: junk.txt
Files /POC/$curr_dt/DDL/test.demo_table1.txt and /POC/Backup/DDL/test.demo_table1.txt differ
Only in /POC/$curr_dt/DDL/: test.demo_table2.txt

이제 위에 표시된 데이터에서 다음 정보를 얻고 싶습니다.

  1. /POC/Backup/DDL/에서만:
  2. /POC/$curr_dt/DDL/에서만:
  3. 파일* 다름

예를 들어:

diff -q /POC/05_26_2022/DDL/ /POC/Backup/DDL/ | grep -i '^Files.*.differ$'
Files /POC/05_26_2022/DDL/test.demo_table1.txt and /POC/Backup/DDL/test.demo_table1.txt differ

위와 같이 전체 데이터 행을 얻습니다. test.demo_table1.txt를 가져와서 파일에 저장하면 됩니다. 비슷하게


i am not able to grep with variable $curr_dt in the file

답변1

$curr_dt위에 제공된 코드 조각에서 변수가 설정/확장되지 않은 것 같습니다 . 적어도 출력 echo에는 나타나지 않으며 나타나지 않습니다 . (xtrace) 옵션 세트를 diff사용하여 -x코드를 실행합니다 . 다른 질문이 있으시면 다음을 시도해 보세요.

awk '/^Only/ {gsub("[/:]+", "_", $3); print $NF > $3} /^Files.*differ/ {sub(/^.*\//, "", $2); print $2 > "different"}' file

각각의 파일 이름을 가진 세 개의 파일이 생성되어야 합니다.

OP의 반복된 요청에 따라 파일 이름이 인식/인식된 디렉터리로 축소되었습니다.

awk '
/Only/          {m = split($3, T, "[/:]+")
                 print $NF > T[m-2]
                }
/Files.*differ/ {sub(/^.*\//, "", $2)
                 print $2 > "different"
                }
' file

관련 정보