>

5000 개 이상의 파일 모음이 있고 output.txt 를 만들고 싶습니다.  파일 이름과 함께 모든 파일의 27 번째 줄을 포함하는 파일입니다. 인터넷에서 얻은 것은 awk 를 사용하여 단일 파일에서 특정 줄을 선택하는 것입니다.  또는 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 사용  루프 :

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

    와이즈 비즈  5000 개 이상의 파일이 있으면 루프가 비쌀 수 있지만 현재 하드웨어에 문제가 없어야합니다.

    <시간>

    빠른 길, for 종료  27 행 후(감사 @Fiximan):

    sed
    
    

  • 답변 # 3

    또 다른 가능성은 :

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

  • 답변 # 4

    간단한 awk 사용법 :

    for i in * ; do echo -n $i" : "  ; head -n 27 "$i" | tail -n 1 ; done > output.txt
    
    
    awk 'FNR==27 {print FILENAME,$0}' /path/to/files/log_*.txt > outfile.txt

관련 자료

  • 이전 Ubuntu Server - 우분투 서버 - 패키지를 제거 할 수 없습니다
  • 다음 `curl -v`는 본문을 포함한 완전한 HTTP 요청을 보여줍니까?