확장자가 .xyz인 파일을 찾지만 두 개의 용어가 발견된 경우에만 레코드를 반환합니다.

확장자가 .xyz인 파일을 찾지만 두 개의 용어가 발견된 경우에만 레코드를 반환합니다.

내 상황은 전체 클러스터에서 확장자가 .xyz 및 sed/grep/awk/?인 파일을 검색해야 하는 것입니다. off 두 개의 고유 값 "CONFNAME" 및 "INPUTSQL"을 포함하는 레코드만 포함됩니다.

질문:
1. 이 정보를 반환하려면 올바른 파이프라인을 구축하세요.
2. 이 두 값 사이의 가비지 행 50개를 제거하고 두 개의 열이 있는 csv로 형식화합니다.

예시 파일:

1_TOD_DO_ON.x
1  !prototype|P|||${AIDQ_MP}/dA_lookIP.mp
2  CONFNAME|$|||ITEST_New_Deal
...
...
50 INPUTSQL||||Select \n 'ITOD|L1235'

이러한 .zyz 파일에 필요한 두 가지 데이터는 다음과 같습니다.ITEST_NEW_TRANSACTION그리고ITOD|L1235(쉼표로 구분).

질문 1에서 시도한 몇 가지 사항

cd To_Correct_Search_Path

ㅏ.

find . -type f -iname "*.xyz" -exec egrep -i CONFNAME --color=auto --with-filename {} \; 

//하나의 값만 찾았습니다.

비.

find . -type f \( -iname "*.xyz" -o -name "CONFNAME" -o -name "INPUTSQL" \) -exec sh -c 'echo "$0"' {} \; >

//"INPUT_SQL"인 경우 마지막 값만 찾습니다.

씨.

find . -type f -iname "*.pset" -exec egrep -i CONFNAME egrep -i INPUTSQL --color=auto --with-filename {} \; 

//마지막 값만 찾습니다.

질문 2의 경우

to 값 사이의 쓰레기를 제거하기 위해 두 개의 다른 값을 닫고 싶습니다.그러나 검색에서 반환된 정보에 이러한 값을 포함합니다.. 여기에 몇 가지 아이디어가 있지만 먼저 문제 1을 해결해야 합니다. 제안은 절대적으로 환영합니다!

답변1

첫 번째 질문에 관해:

당신은 할 수결합 find하고grep. 그리고 당신은 여전히 ​​​​할 수 있습니다여러 개 결합grep. 첫 번째는 grep아무 것도 인쇄하지 않고( -q) 마지막 것은 다른 하나가 통과한 후에만 파일을 인쇄합니다.

그러면 다음 두 문자열이 포함된 파일만 찾습니다.

find . -type f -iname "*.xyz" \
  -exec sh -c 'grep -qi CONFNAME "{}" && grep -li INPUTSQL "{}"' \;

막히면 두 번째 질문에 새로운 질문을 해볼 가치가 있을 수도 있습니다. 도움이 될 수 있습니다 awk.

관련 정보