내 상황은 전체 클러스터에서 확장자가 .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
.