Taglia il comando con la parola come delimitatore


10

Esiste un comando di taglio da tagliare basato su una parola, ad esempio:

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

Voglio l'output come:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

Come avvicinarsi?


1
Quale parola intendi?
Ciro,

ABCD è la parola che voglio usare come delimitatore. Inoltre, questo è un registro e, come ABCD, ho anche altre parole chiave. Voglio un approccio in generale
Anony il

Risposte:


16

Suggerisco:

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

Produzione:

171212 16082784 6264 XXX xxxxxxxx Transazione XXXXX abend ABCD.

FScontiene il delimitatore "ABCD". "ABCD" è una regex.


4

awkpuò fare il lavoro se si fornisce -Fflag con la parola che si desidera utilizzare:

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

Nel tuo caso particolare, sarebbe:

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

A giudicare dal tuo esempio, stai solo provando a stampare roba per ABCDeliminare tutto dopo che è anche un'opzione:

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

Vogliono anche mantenere il "ABCD".

Sì..ABCD deve essere lì
Anony il

Io suggerisco awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'.
dessert


2

grep soluzione:

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

L'espressione regolare corrisponderà a ciascuna riga che inizia ^con qualsiasi carattere .ripetuto il numero di volte *e termina con la stringa ABCD.La barra rovesciata \sfugge al significato speciale del punto .alla fine.

L'opzione -oindicherà al grepcomando di stampare solo le parti corrispondenti (non vuote) di una linea corrispondente.


2

cutpuò svolgere questo lavoro da solo. Non basato su una parola, ma basato sul .delimitatore.

Uso :

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

Produzione

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.

xargsviene utilizzato qui solo per aggiungere .alla fine della stringa ABCD.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.