単語を区切り文字としてコマンドを切り取る


10

単語に基づいてカットするカットコマンドはありますか?

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

出力を次のようにしたい:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

どのようにアプローチしますか?


1
どういう意味?
Cyrus

ABCDは、区切り文字として使用する単語です。また、これはログであり、ABCDと同様に、他のキーワードもあります。私は一般的なアプローチを求めています
匿名

回答:


16

私は提案します:

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

出力:

171212 16082784 6264 XXX xxxxxxxxトランザクションXXXXX異常終了ABCD。

FS区切り文字「ABCD」が含まれています。「ABCD」は正規表現です。


4

awk-Fあなたが使用したい単語でフラグを提供すれば仕事をすることができます:

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

あなたの特定のケースでは、それは:

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

あなたの例から判断すると、最大のものまで印刷しようとしているだけなABCDので、その後にすべてを削除することもオプションです:

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

彼らはまた、「ABCD」を維持したいと考えています。

はい。ABCDが存在している必要があります
Anony

お勧めしawk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'ます。
デザート


2

grep 解決:

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

正規表現は^、任意の文字で.繰り返さ*れ、文字列で終わる各行に一致しますABCD.。バックスラッシュ\.、最後のドットの特別な意味をエスケープします。

このオプション-ogrep、一致する行の一致した(空でない)部分のみを印刷するようにコマンドに指示します。


2

cutそれ自体がこのジョブを実行できます。単語ではなく、.区切り文字に基づいています。

使用する :

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

出力

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.

xargsここで.はstringの末尾に追加するためにのみ使用されますABCD


0

ここでも同様の問題に直面しています。私のファイルの内容はこのようなものです

2020-03-31 00:15:07 CEST| "EE-ManagedThreadFactory-default-Thread-162" #14608149 daemon prio=5 os_prio=0 tid=0x0000000018000800 nid=0x567a waiting on condition [0x00007f3b07561000]
2020-03-31 00:15:07 CEST| "ForkJoinPool.commonPool-worker-6" #14521326 daemon prio=5 os_prio=0 tid=0x000000000ab85800 nid=0x6ea4 waiting on condition [0x00007f3b05844000]
2020-03-31 00:15:07 CEST| "EE-ManagedThreadFactory-default-Thread-161" #14350035 daemon prio=5 os_prio=0 tid=0x0000000003a4e000 nid=0x7f11 waiting on condition [0x00007f3b06652000]
2020-03-31 00:15:07 CEST| "EE-ManagedThreadFactory-default-Thread-160" #13654810 daemon prio=5 os_prio=0 tid=0x000000000dd52000 nid=0x1a17 waiting on condition [0x00007f3b0624e000]

tidの値を印刷してほしい。どんな助けでもありがたいです。

ありがとう

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.