등이라는 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
그러면 디렉터리가 반복됩니다. 각 디렉토리에 대해 (사전적 의미에서) 마지막 파일에서 검색하려는 문자열을 찾습니다.
정규 표현식이 아닌 고정 문자열을 찾고 있기 때문에 -F
with를 사용하고 있습니다 .grep
출력에서 파일의 파일 이름을 추가로 얻으려면 on을 마지막 인수로 grep
표시하거나 ( 여러 파일 피연산자를 일치시킬 때 파일 이름이 포함됨) 지원 하는 경우 with를 사용할 수 있습니다 ./dev/null
grep
grep
grep
-H
grep