awk + in các dòng từ dòng đầu tiên cho đến khi khớp từ


8

Tôi muốn in tất cả các dòng từ tệp cho đến khi khớp từ, vui lòng tư vấn cách thực hiện với awk

ví dụ

Tôi muốn in tất cả các dòng cho đến khi từ PPP

nhận xét dòng đầu tiên chuld khác với AAA (bất kỳ từ nào)

cat file.txt

AAA   ( the first line/word chuld be any word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&

vì vậy tôi cần phải có được điều này

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

ví dụ khác (muốn in cho đến khi KJGFGHJ)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

vì vậy tôi cần phải có được

 HG
 KJGFGHJ

Câu trả lời:


12

Thử:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

5
Tương tự như trên thông qua sed:sed '/PPP/q' infile
Costas

@Costas: Có, OP muốn awk, vì vậy tôi không cung cấp cho người khác công cụ.
cuonglm

Số 1 ở đầu giống như một câu lệnh đầy đủ "// {print $ 0}" luôn luôn khớp. awk không in mà không có nó
cidermole

@cidermole: Không chính xác. 1cũng giống như {print $0}. Cũng lưu ý rằng đó //là một mẫu trống và kết quả là không xác định. Đó là công việc ở gawk, mawk, Brian Kernighan phiên bản riêng nhưng không phải trong nawk, oawktừ các công cụ gia truyền ngực.
cuonglm

Cảm ơn các giải pháp sed! Tôi chỉ muốn nó được thực hiện và tôi không quan tâm đến công cụ
Aaron McMillin

6

Hoặc sử dụng mẫu phạm vi khớp với dòng đầu tiên (NR bằng 1) cho đến khi khớp đầu tiên của 'PPP' trong một dòng

awk 'NR==1,/PPP/' file

nếu dòng phải khớp chính xác chỉ sử dụng 'PPP'

awk 'NR==1,/^PPP$/' file

Nếu bạn muốn làm tương tự cho từng tệp trong danh sách đối số, hãy sử dụng biến FNR đặt lại thành 1 cho dòng đầu tiên của mỗi tệp được xử lý

awk 'FNR==1,/PPP/' file1 file2 ...

2

Như OP cho biết dòng đầu tiên hoặc từ của tệp có thể chứa bất kỳ từ nào (giống như PPPchính nó), vì vậy bạn cần kiểm tra và đánh dấu dòng đầu tiên khỏi khớp và tránh awkthoát ra khỏi đó.

Sau đó, bạn có thể thử điều này:

Tập tin đầu vào:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%

Chỉ huy:

awk '1;/PPP/{if (NR>1) exit}' file

Đầu ra:

PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.