하위 디렉터리의 마지막 알파벳 파일에 대한 grep 문자열

하위 디렉터리의 마지막 알파벳 파일에 대한 grep 문자열

등이라는 folder_A이름 의 folder_B다수의 하위 폴더에서 반복 계산을 통해 생성된 파일 세트에서 "사용된 총 CPU 시간" 문자열을 찾아야 합니다.folder_C

그럼 folder_A나도 그럴게

file_1_1 file_1_2 file_1_3 file_1_4 file_1_5 file_2_1 file_2_2 file_2_3

그 옆에는 다른 이름을 가진 다른 파일이 있습니다. 있을 folder_B것이다

file_1_1 file_1_2 file_1_3 file_1_4 file_1_5 file_2_1 file_2_2 file_2_3 file_2_4 file_2_5 file_3_1

등등, 따라서 각 하위 폴더에는 서로 다른 수의 반복 단계가 포함되므로 추가되는 마지막 파일의 수도 달라집니다. 내 생각에 갈 방법은 재귀 grep정렬을 사용하여 마지막 파일을 알파벳순으로 정렬하는 것입니다. 내가 시도한 코드는 다음과 같습니다.

grep -r "Total CPU time used" */file_* | tail -1

그러나 이것은 마지막 디렉토리에 있는 마지막 파일의 출력만을 제공합니다 folder_Z. 건너 folder_A/file_2_3뛰지 않도록 모든 하위 디렉터리에서 문자열을 어떻게 grep할 수 있나요 folder_B/file_3_1?

답변1

tail -1호출 결과의 마지막 줄을 제공 합니다 grep. 이는 마지막 디렉터리의 마지막 파일 일치에서 발생할 수 있습니다.

대신 디렉터리를 반복해야 합니다. 이는 다음과 같이 사용됩니다 bash.

for dir in folder_*/; do
    files=( "$dir"/file_* )
    grep -F 'Total CPU time used' "${files[-1]}"
done

그러면 디렉터리가 반복됩니다. 각 디렉토리에 대해 (사전적 의미에서) 마지막 파일에서 검색하려는 문자열을 찾습니다.

정규 표현식이 아닌 고정 문자열을 찾고 있기 때문에 -Fwith를 사용하고 있습니다 .grep

출력에서 파일의 파일 이름을 추가로 얻으려면 on을 마지막 인수로 grep표시하거나 ( 여러 파일 피연산자를 일치시킬 때 파일 이름이 포함됨) 지원 하는 경우 with를 사용할 수 있습니다 ./dev/nullgrepgrepgrep-Hgrep

관련 정보