2011-08-02 6 views
4

似た質問をしている多くの記事を見てきました。それを働かせることはできません。 AWKで解析しようとawkでパイプ区切りの入力を解析する

<field one with spaces>|<field two with spaces> 

入力は次のようになります。

は優れた記事から多くのバリエーションを試してみました:

FS = "^[\x00- ]*|[\x00- ]*[|][\x00- ]*|[\x00- ]*$"; 
FS = "^[\x00- ]*|[\x00- ]*\|[\x00- ]*|[\x00- ]*$"; 
FS = "^[\x00- ]*|[\x00- ]*\\|[\x00- ]*|[\x00- ]*$"; 

スティルパイプ区切り文字を動作させることはできません。

CentOSを使用しています。

助けが必要ですか?

答えて

14
echo "field one has spaces | field two has spaces" \ 
| awk ' 
    BEGIN { 
     FS="|" 
} 
{ 
    print $2 
    print $1 
    # or what ever you want 
}' 

#output 

    field two has spaces 
    field one has spaces 

あなたはまた、すべてではないawksがFS値の複数文字の正規表現を取ることができ、編集

awk -F'|' { 
    print $2 
    print $1 
}' 

にこれを削減することができます。

EDIT2 は、どういうわけか私はもともとこれを逃したが、私はあなたが前と|文字の後の文字クラスで\x00を含めるようにしようとしている参照してください。私はあなたが意味すると仮定します\x00 == null char? awkにnull文字が埋め込まれたファイルを解析させることはできないと思います。あなたは

tr '\x00' ' ' <file.txt> spacesForNulls.txt 

のように、あなたの入力を分取rocess OR

tr -d '\x00' <file.txt> deletedNulls.txt 

でそれらを完全に削除して正規表現のその部分を排除することができます。しかし、上記のように、awkの一部は、FS値の正規表現をサポートしていません。 そして、私はtrトリックを使用していません。trのバージョンに応じて、null charの表記が若干異なることがあります。

これが役立ちます。

+0

「\ x00」との大きなポイント。あるいは、opは 'perl'や' ruby​​'のようなもっと特殊なツールを使うべきです。 ++ – sjsam

+0

'awkにヌル文字を埋め込んだファイルを解析させることはできないと思いますか? 'awk '{gsub(" \ x00 "、" "}} 1は可能です。 – sjsam

関連する問題