Cut을 사용하여 텍스트 파일의 특정 줄을 인쇄하는 방법

Cut을 사용하여 텍스트 파일의 특정 줄을 인쇄하는 방법

다음 로그 출력 조각이 있습니다.

Server Server: Server
Date and Time: June 04 2018 14:10:00
--

Product     Version         User         Host             IP             Duration

Software1      11.0     user               user         *.**.***.***     10:08
Software2      11.0      user                user        *.**.***.***     10:05
===================================================================================

나는 의사 소통하고 싶다자르다명령은 출력만 필터링합니다. 예:

Product     Version         Host             IP             Duration

Software1      11.0    user             *.**.***.***     10:08
Software2      11.0     user            *.**.***.***     10:05

또한 위의 첫 번째 예에서는 파일 전체에서 반복되므로 동일한 필터를 여러 번 적용하는 것이 가능한지 궁금합니다.

답변1

cut이 경우 데이터 열이 명확하게 정의되지 않았기 때문에 실제로 사용할 수 없습니다 . 이 cut유틸리티는 정확히 3개의 공백이나 탭 또는 가지고 있는 구분 기호와 같이 숫자를 정확하게 잘라서 작동합니다. 이 경우 이를 사용하여 입력 줄을 연속된 공백 수에 관계없이 분할해야 합니다 awk(기본값).

$ awk -v OFS="\t" '/^==/ { next } NR > 4 { print $1, $2, $4, $5, $6 }' file | column -t
Product    Version  Host  IP            Duration
Software1  11.0     user  *.**.***.***  10:08
Software2  11.0     user  *.**.***.***  10:05

프로그램은 awk5행에서 시작하는 모든 행 ==과 5행 이전의 모든 행을 건너뜁니다. 다른 모든 행의 경우 필드의 선택 사항을 인쇄합니다(세 번째 행 아님 User).

마지막으로 column -t결과는 멋진 테이블로 형식화됩니다.

답변2

awk를 사용하세요:

 awk '/--/{flag=1; next} /====/{flag=0} flag' filename

SED 사용:

 sed -n '/--/,/===/{/--/!{/===/!p}}' filename

grep을 사용하세요:

grep -E 'Product|Mathematica|MathKernel|Syntax' filename

답변3

가장 간단한 해결책을 찾았습니다.

awk '{print $1,$2,$4,$5,$6}' file1.log > file2.log

내가 원하는 열만 인쇄할 수 있습니다.

Product     Version         Host             IP             Duration

Software1       11.0         User          *.**.***.***     10:08
Software2        11.0        User           *.**.***.***     10:05

중요한 용도를 몰랐어요awk

관련 정보