Cắt lệnh với từ là dấu phân cách


10

Có lệnh cắt nào để cắt dựa trên một từ không, ví dụ:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27

Tôi muốn đầu ra là:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Cách tiếp cận?


1
Bạn có ý nghĩa gì
Cyrus

ABCD là từ mà tôi muốn sử dụng làm dấu phân cách. Ngoài ra, đây là một bản ghi, và giống như ABCD, tôi cũng đang có một số từ khóa khác. Tôi muốn một cách tiếp cận nói chung
Anony

Câu trả lời:


15

Tôi đề nghị:

awk -F 'ABCD' '{print $1 FS "."}' file

Đầu ra:

171212 16082784 6264 XXX xxxxxxxx Giao dịch XXXXX sử dụng ABCD.

FSchứa dấu phân cách của bạn "ABCD". "ABCD" là một biểu thức chính quy.


4

awkcó thể thực hiện công việc nếu bạn cung cấp -Fcờ với từ mà bạn muốn sử dụng:

$ awk -F 'test'  '{print $1;print $2}'  <<<  "onetesttwotest"                                                            
one
two

Trong trường hợp cụ thể của bạn, đó sẽ là:

$ awk -F 'ABCD' '{print $1,FS}' input.txt                                                                                
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend  ABCD

Đánh giá từ ví dụ của bạn, bạn chỉ cố gắng in nội dung để ABCDxóa mọi thứ sau đó cũng là một tùy chọn:

$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt                                                               
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Họ cũng muốn giữ 'ABCD.'

Phải..ABCD phải ở đó
Anony

Tôi đề nghị awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'.
tráng miệng


2

grep giải pháp:

grep -o '^.*ABCD\.' input.txt

Biểu thức chính quy sẽ khớp với từng dòng bắt đầu ^bằng bất kỳ ký tự nào được .lặp lại số lần *và kết thúc bằng chuỗi ABCD.Dấu gạch chéo ngược \thoát khỏi ý nghĩa đặc biệt của dấu chấm .ở cuối.

Tùy chọn -onày sẽ cho greplệnh chỉ in các phần khớp (không trống) của một dòng khớp.


2

cutchính nó có thể thực hiện công việc này. Không dựa trên một từ, mà dựa trên .dấu phân cách.

Sử dụng :

cut -f 1 -d '.' input.txt | xargs -I "%" echo %.

Đầu ra

rooney@bond-pc:~$ cat input.txt 
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
rooney@bond-pc:~$ 
rooney@bond-pc:~$ cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

xargschỉ được sử dụng ở đây để nối .vào cuối chuỗi ABCD.

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.