web-dev-qa-db-ja.com

Wordを区切り文字として使用してカットコマンド

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

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.

アプローチ方法

10
Anony

私は提案します:

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

出力:

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

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

14
Cyrus

awkは、使用するWordに-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.
4

sedバージョン:

sed 's/ABCD.*/ABCD./' input.txt
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

ソース: https://unix.stackexchange.com/questions/257514/how-to-delete-everything-after-a-certain-pattern-or-a-string-in-a-file

4
user689314

grepソリューション:

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

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

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

2
pa4080

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

つかいます :

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は、文字列ABCDの最後に.を追加するためにのみ使用されます。

2
Rooney