テキストファイルがあるとしましょう。
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