각 파일에 대한 grep 출력 간격 설정

각 파일에 대한 grep 출력 간격 설정

여러 파일을 grep할 때 여러 파일에 내가 찾고 있는 단어가 포함되어 있으면 출력이 차례로 나오므로 읽기가 어렵습니다. 어쨌든 각 파일의 출력을 일치시킨 후에 추가 \n을 삽입할 수 있습니까?

예를 들어, 내가 얻는 현재 출력은

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>
<daily_log.20140704-matches  about 10 lines>
<daily_log.20140706-matches  about 50 lines>

다음과 같은 것을 달성하려고 노력하고 있습니다.

$ grep word daily_log.201407*
<daily_log.20140702-matches  about 100 lines>


<daily_log.20140704-matches  about 10 lines>


<daily_log.20140706-matches  about 50 lines>

질문이 명확해지기를 바랍니다. 이를 수행할 수 있는 방법이 있습니까?

답변1

각 파일을 grep하고 grep 결과에 따라 추가 줄을 추가할 수 있습니다(즉, 일치하지 않는 파일은 제외).

for fn in daily_log.201407* ; do
grep word "$fn"
if [ $? == 0 ] ; then
   echo -e '\n\n\n'
fi
done

답변2

가장 간단한 방법은 아마도awk대신에:

awk 'FNR==1 { print "\n\n\n" } ; /word/ { print FILENAME ":" $0 }' daily_log.201407*

word이는 이전 파일 이름과 일치하는 모든 줄을 인쇄합니다 ( grep여러 파일로 작업하는 것과 같습니다). 각 파일의 첫 번째 줄 앞에 빈 줄이 인쇄됩니다. 파일의 시작 부분에 있다는 것을 알고 있습니다.FNR(현재 파일의 줄 번호) 예 1.

관련 정보