첫 번째 줄을 읽지 않고 특정 문자열에 대해 찾은 줄을 삭제하는 grep -v 명령을 원합니다.
주문 ID, 타임스탬프 변경, 조건, 상태 OD10,2017-04-25 07:21:13.069,A,D OD11,2017-04-25 07:21:13.069,A,D 주문 ID, 타임스탬프 변경, 조건, 상태 OD14,2017-04-26 07:21:13.069,A,D OD15,2017-04-26 07:21:13.069,A,D 주문 ID, 타임스탬프 변경, 조건, 상태 OD16,2017-04-27 07:21:13.069,A,D OD17,2017-04-27 07:21:13.069,A,D
예상하다:
주문 ID, 타임스탬프 변경, 조건, 상태 OD10,2017-04-25 07:21:13.069,A,D OD11,2017-04-25 07:21:13.069,A,D OD14,2017-04-26 07:21:13.069,A,D OD15,2017-04-26 07:21:13.069,A,D OD16,2017-04-27 07:21:13.069,A,D OD17,2017-04-27 07:21:13.069,A,D
원본 파일을 건드리지 않고 다른 파일로 출력해야 합니다.
답변1
$ awk 'NR==1 {print; next;} !/orderID/' input.txt > output.txt
더 짧은 구문:
$ awk 'NR==1 || !/orderID/' input.txt > output.txt
답변2
셸에서 파일을 복합 명령으로 리디렉션할 수 있습니다. 여기서 첫 번째 줄을 읽고 인쇄한 다음 나머지 스트림에서 해당 텍스트를 제외합니다.
{ read -r header; echo "$header"; grep -Fv "$header"; } < file
이 방법을 사용하면 헤더를 제외하기 위해 헤더의 내용을 알 필요가 없습니다.
이에 상응하는 awk는 다음과 같습니다.
awk 'NR==1 {header = $0; print} $0 == header {next} {print}' file