テキストフィールドを含むタブで区切られたデータファイルがあり、その一部にはセミコロンで区切られ、繰り返される情報があります。
2000;2000
05/19/2016;05/19/2016
foo;foo
重複した部分をどのようにsed
削除できますか?セミコロンは他のフィールドに頻繁に表示されるため、セミコロンの両側にある文字列を検索してタブ文字、つまり\t$1;$1\t
(\t
タブを意味する)で囲んでから、$1
セミコロンと重複しない文字列に置き換える必要があるようです。インスタンスサイト。他のテキスト解析コマンドを使用できます。
ベストアンサー1
ファイルで次を使用しますtabbed.input
(空白なし、連続するすべての空白はタブです)。
abc bd c 2000;2000 d 2;00;2;01
e 05/19/2016;05/19/2016 foo;foo f g
次のPythonプログラム:
def cleaned(f):
length = len(f)
if (length % 2) == 0:
return f # even number of characters in field, middle one never ';'
half_way = length // 2
if f[half_way] != ';':
return f
before, after = f[:half_way], f[half_way+1:]
if before == after:
return before
return f
with open('tabbed.input') as fp:
for line in fp:
fields = line[:-1].split('\t')
cleaned_fields = [cleaned(f) for f in fields]
print('\t'.join(cleaned_fields))
結果は次のとおりです。
012345670123456701234567012345670123456701234567
abc bd c 2000 d 2;00;2;01
e 05/19/2016 foo f g
偶数文字をテストし、フィールドの中央に ""を含めること;
で、冗長データに ""が含まれている;
場合にも機能します。