1

「一意の」区切り文字を使用してデータベースにインポートするデータファイルがいくつかあります。

フィールド区切り文字 (FS): SOH (ASCII 文字 1)

レコード セパレータ (RS) : STX (ASCII 文字 2) +'\n'</p>

COPY コマンドを使用してファイルを Postgres にインポートしたいのですが、カスタム フィールド区切り文字を指定できますが、レコード区切り文字を処理できません。

データから \002 を取り除くこともできません。なぜなら、フィールドの 1 つに改行がある場合 (および存在する場合)、COPY が誤って新しいレコードであると見なしてしまいますが、実際には新しいレコードではないからです。 .

注意すべき重要な点の 1 つは、フィールド内の改行が維持されることは重要ではありません。改行がスペースに変換されるだけであれば問題ありません。

これを念頭に置いて、「sed」のようなものを使用して改行をスペースに変換し、次に \002 を改行に変換することを考えていました。ただし、sed は行ベースのツールであるため、各行の末尾に改行が表示されないようで、検索/置換を実行できません。

仕事をすることができる他のUNIXコマンドラインツールはありますか?

編集:私が本当に求めているのは、ファイルを行に分割せずに「バイナリ」として処理(検索/置換を実行)できるUNIXユーティリティだと思います

4

2 に答える 2

3

Patrickの提案に基づいて、Perl を使用してそれを行うことができました。

猫ファイル | perl -pe 's/\002\n/\002\002/g' | perl -pe 's/\n/ /g' | perl -pe 's/\002\002/\n/g'

于 2008-12-19T04:04:54.887 に答える
1

ファイルを複数回通過できますか? 1 を渡すと、すべての \002\n が \002\002 に変換されます。パス 2 はすべての \n をスペースに変換できます。パス 3 では、すべての \002\002 を \n に変換できます。

于 2008-12-19T01:16:44.600 に答える