파일의 압축을 풀고 AWK 및 파이프를 사용하여 해당 내용을 처리합니다.

파일의 압축을 풀고 AWK 및 파이프를 사용하여 해당 내용을 처리합니다.

로그 파일의 압축을 풀고 awk를 사용하여 해당 로그 파일의 일부 특정 열을 표시해야 합니다. 파이프를 사용하여 이 작업을 수행할 수 있습니까?

unzip log.zip | awk -F "- -" '{pring $1 " " $2} >newfile

답변1

unzip.zip 파일의 내용을 stdout으로 압축 해제하려면 의 옵션을 사용해야 합니다 -c. 그렇지 않으면 .zip 파일의 파일을 디스크에 압축 해제하고 파이프할 항목이 없습니다 awk.

Unix가 아닌 MS-DOS/Windows에서 시작된 많은 프로그램과 마찬가지로 unzip이 프로그램도 수행하는 작업에 대해 설명이 깁니다. Unix 프로그램은 일반적으로 또는 -v옵션 이나 유사한 옵션을 사용하여 명시적으로 지시하지 않는 한 이 작업을 수행하지 않습니다 . 이는 dos/windows와 unix 소프트웨어 사이의 중요한 문화적 차이입니다. 그리고 프로그래머.--verbose--debug

stdin에서 입력을 받는 모든 프로그램의 POV에서 보면 이는 난독화되는 쓰레기임이 거의 확실합니다(이것이 UNIX 프로그램이 사용자가 지시하지 않는 한 장황하지 않은 이유입니다). 따라서 (조용함) 또는 (매우 조용함) 옵션을 사용하여 unzip"Shut up and get to work(닥치고 일 시작하세요)"라고 말하세요.-q-qq

예를 들어

unzip -qq -c log.zip | awk -F'- -' '{print $1, $2}' >newfile

그런데 awk스크립트를 약간 변경했습니다. pring구문 오류를 수정했습니다 . 또한 기본 출력 필드 구분 기호( OFS) awk는 공백입니다. 입력 필드 구분 기호( FS)를 다른 것으로 설정하더라도(예 -F'- -': 그래서 그냥 인쇄합니다 $1,$2. 큰따옴표 공백 문자를 사용할 필요가 없습니다.

답변2

다음을 수행할 수 있습니다.

awk -F "--" '{print $1 " "$2}' <(gzip -dc log.zip)

gzip 명령 사용 -d-c옵션.

    -c --stdout --to-stdout
          Write output on standard output
    -d --decompress --uncompress
          Decompress.

물론 표준 리디렉션을 사용하여 출력을 파일로 보낼 수 있습니다.

awk -F "--" '{print $1 " "$2}' <(gzip -dc log.zip) > my_out_file

Cas가 주석에서 지적했듯이 gzip은 대부분의 .zip 파일에서 작동하지만 unzip이 명령과 함께 사용할 수 있는 모든 파일에서 작동한다는 보장은 없습니다.

awk -F "--" '{print $1 " "$2}' <(unzip -cq log.zip) > my_out_file

옵션은 약간 다르지만 결과는 동일합니다.

관련 정보