重複した情報を含むテキストフィールド

重複した情報を含むテキストフィールド

テキストフィールドを含むタブで区切られたデータファイルがあり、その一部にはセミコロンで区切られ、繰り返される情報があります。

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

偶数文字をテストし、フィールドの中央に ""を含めること;で、冗長データに ""が含まれている;場合にも機能します。

おすすめ記事