1

次のようなファイルがあります。

ASDFGHJ|ASDFEW|ASFEWFEWAFEWASDFWE FEWFDWAEWA FEWDWDFEW|EWFEW|ASKOKJE
IOJIKNH|ASFDFEFW|ASKDFJEO JEWIOFJS IEWOFJEO SJFIEWOF WE|WEFEW|ASFEWAS

このファイルはキリル文字で書かれており、データベースがバイト数 (対文字数) について不平を言っているため、このファイルに問題があります。たとえば、最初のフィールドが 10 バイトを超えているか、2 番目のフィールドが 30 バイトを超えているかなどを確認したいと考えています。

私はさまざまなことを試してきました: awc、wc ... wc -c でバイトを数えることはできますが、X より大きいフィールドを持つ行だけを取得するにはどうすればよいですか?

何か案が?

4

3 に答える 3

1

FIELD特定の特定のバイト数を取得するには、次のコマンドLINEを発行できます。awk

awk -F'|' -v LINE=1 -v FIELD=3 'NR==LINE{print $FIELD}' input.txt | wc -c

すべてのフィールドのバイト数を出力するには、小さなループを使用できます。

awk -F'|' '{for(i=1;i<NF;i++)print $i}' a.txt | \
while read field ; do 
    nb=$(wc -c <<<"$field")
    echo "$field $nb"

    # Check if the field is too long
    if [ "$nb" -gt 40 ] ; then
        echo "field $field is too long"
        exit 1
    fi
done
于 2014-08-13T15:57:30.270 に答える