2

GnuWin32 (sed 4.2.1 およびコア ユーティリティ 5.3.0) を使用して Windows Vista で作業しています。ActivePerl 5.14.2 パッケージもあります。

大きなマルチ レコード ファイルがあります。ファイル内の各レコードの終わりは、4 つのドル記号 ($$$$) で示されます。各論理レコード内には、多くの「CRLF」があります。

CRLF のすべてのインスタンスを|+|. $$$$次に、CRLFに置き換えます。結果: 行ごとに 1 つのレコードを Excel にインポートして、さらに操作することができます。

CRLFに変換する方法をいくつか試しました|+|が、成功しませんでした。

たとえば、次のような方法がありました。sed -e "s/[\r\n]/|+|/g" source_file_in target_file_out

別のメソッドを使用tr -dして削除\rし、次に 2 番目のステートメントを使用します。sed -e "s/\n/|+|/g" source_file_in target_file_out

trステートメントは機能しました。sed声明はそうではありませんでした。

\r\n次の記事を読みましたが、それらを適応させてのような記号に置き換える方法がわかりません|+|

sed: CR および/または LF を "\r" "\n" に置き換える方法。これにより、任意のファイルが 1 行になります。

CRLF を含む文字列を置き換えますか?

sed を使用して改行 (\n) を置き換えるにはどうすればよいですか?

この問題がsed(and tr) を使用しても簡単に解決できない場合は、誰かが方法を教えてくれれば Perl を使用します。


エドさん、お勧めありがとうございます。

awk スクリプトはまだ完全に機能していないため、推奨事項を微調整できることを期待して、不足している詳細を追加します。

まず、gawk v3.1.6.2962 を実行しています。awk の実装には違いがあるかもしれないと思うので、これは役に立つ情報かもしれません。

次に、データの種類とデータの出所に関する情報をいくつか追加します。

データは化学物質に関するものです (立体化学描画プログラムに入力されるテキスト データ)。

化学ファイルは .sdf 形式です。

NotePad++ で "133711.sdf" を開くと (表示/シンボルの表示/すべての文字の表示を使用)、スクリーン ショットに示されているデータが表示されます: https://dl.dropbox.com/u/3094317/_master_1_screen_shot_.png

ご覧のとおり、LF のみ - CR はありません。これは、.sdf ファイルの起源が UNIX システムであることを意味していると思います。

次に、Windows コマンド COPY *.sdf _master_2_.txt を実行します。これにより、レコードに解析したい非常に大きなファイルのファイルが作成されます。

_master_2_.txt の構造は 133711.sdf と同じです - LF のみ。CRなし。

次に、.BAT ファイルで awk の推奨事項を実行します。Microsoft が私を作ったので、一重引用符を二重引用符に置き換える必要があります。

awk -v FS="\r\n" -v OFS="|+|" -v RS="\$\$\$\$" -v ORS="\r\n" "{$1=$1}1" C:_master_2_.txt >C:\output.txt

output.txt のスクリーン シャウトを添付しました: https://dl.dropbox.com/u/3094317/output.txt.png

ご覧のとおり、awk コマンドは "\r\n" を "|+|" に正常に置き換えませんでした。

さらに、Windows は CRLF を使用して output.txt を作成しました。

4 つの $ を CRLF に置き換えることに成功しました。

この情報は、Windows 関連の問題を処理するために awk の推奨事項を更新するのに十分ですか?

4

1 に答える 1

0

GNU awk でこれを試してください:

awk -v FS='\r\n' -v OFS='|+|' -v RS='\\$\\$\\$\\$' -v ORS='\r\n' '{$1=$1}1' file

あなたの更新された質問から、あなたが Windows を使用していることがわかります。ばかげた引用規則と問題を避けるために、これを「whatever.awk」という名前のファイルに入れます。

BEGIN{FS="\r\n"; OFS="|+|"; RS="\\$\\$\\$\\$"; ORS="\r\n"} {$1=$1}1

そしてそれを次のように実行します

awk -f whatever.awk file

そして、それがあなたが望むものかどうかを確認してください。

于 2013-01-31T14:14:05.750 に答える