子区切り記号を使用して最初の列を変更する

子区切り記号を使用して最初の列を変更する

テキストファイルがあるとしましょう。

aaa-123;bread;apple;banana
aaa-123;bread;apple;banana
aaa-123;bread;apple;banana
bbb-123;bread;apple;banana
bbb-1234;bread;app-le;banana
bbb-222;bread;apple;banana

最初の列のawkを介して-と。間の予想される結果を削除する必要があります。

aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana

答え1

これは、どのフィールドにsが含まれているか、最初のフィールドにsが含まれているかどうかに関係なく、すべての-Unixシステムのすべてのシェルですべてのawkで機能します。

$ awk 'BEGIN{FS=OFS=";"} {sub(/-.*/,"",$1)} 1' file
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana

答え2

sed貪欲ではない(可能な限り短い)マッチングの場合:

sed 's/-[^;]*;/;/' infile

答え3

機能の使用awkと使用:split()

awk -v FS=';' 'split($1,a,/-/) {$1=a[1];print $1, $2, $3, $4}' OFS=';' file
aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;app-le;banana
bbb;bread;apple;banana

答え4

awk '{gsub(/-[0-9]*/,"",$1);print }' filename

 sed 's/-[0-9]*//g' filename

Python

#!/usr/bin/python
import os
import re 
m=re.compile(r'-[0-9]*')
k=open('filename','r')
for i in k:
    m=re.sub(o,"",i)
    print m.strip()

出力

aaa;bread;apple;banana
aaa;bread;apple;banana
aaa;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;apple;banana
bbb;bread;apple;banana

関連情報