여러 파일의 특정 줄 인쇄

여러 파일의 특정 줄 인쇄

output.txt저는 5000개 이상의 파일 컬렉션을 가지고 있으며 모든 파일과 해당 파일 이름의 27번째 줄을 포함하는 파일을 만들고 싶습니다 . 내가 인터넷에서 얻은 것은 awkor sed명령을 사용하여 단일 파일에서 특정 줄을 선택하는 것입니다. 예를 들면 다음과 같습니다. $sed -n 27p *.txt >>output.txt

예를 들어 디렉터리에 있는 내 파일은 다음과 같습니다.

log_1.txt
log_2.txt
log_3.txt
log_4.txt
.
.
.

나는 각 파일의 라인 27과 해당 파일 이름이 새 파일의 인쇄된 라인 앞이나 뒤에 있기를 원합니다 output.txt.

답변1

 awk 'FNR==27 {print FILENAME, $0}' *.txt >output.txt
  • FILENAME현재 입력 파일 이름의 내장 awk 변수입니다.
  • FNR현재 파일의 줄 번호를 참조합니다.
  • $0전체 라인을 나타냅니다.

답변2

또 다른 가능성은 다음과 같습니다.

for i in * ; do echo -n $i" : "  ; head -n 27 "$i" | tail -n 1 ; done > output.txt

답변3

for루프를 사용하십시오 .

{ for i in *.txt; do echo "$i : $(sed -n '27p' "$i")"; done ;} >output.txt

5000개 이상의 파일이 있기 때문에 루핑 for비용이 많이 들 수 있지만 현재 하드웨어를 고려하면 문제가 되지 않습니다.


더 빠른 방법, sed27호선 이후 출구(@Fiximan에게 감사드립니다):

{ for i in *.txt; do echo "$i : $(sed -n '27p;q' "$i")"; done ;} >output.txt

답변4

간단한 awk 사용법:

awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt

관련 정보