0

テーブルに取り込んでいる ftp サーバーから csv ファイルを受け取りました。ファイルの取り込み中に、「ファイルは切り捨てられたファイルでした」というエラーが表示されます

実際の理由は、ファイル内のデータの行末に $ と ^M$ が含まれているためです。例:

ACT_RUN_TM, PROG_RUN_TM, US_HE_DT* ^M$ * "確認済み","","3600" $

Linux コマンドを使用して、行末からこれらの $ と ^M$ を削除するにはどうすればよいですか。

4

2 に答える 2

3

最終的に正しい解決策は、バイナリ モードではなくテキスト モードで FTP サーバーからファイルを転送することです。これにより、適切な行末変換が行われます。ダウンロード スクリプトまたは FTP アプリケーションの構成を変更して、テキスト転送を有効にし、今後これを修正してください。

これが 1 回限りの転送であり、既にファイルをダウンロードしており、それを修正したいだけであると仮定すると、tr(1) を使用して文字を変換できます。そのため、すべてのcontrol-M 文字をファイルから削除するには、パイプを介してtr -d '\r'. または、それらを代わりに control-J に置き換えたい場合 – たとえば、ファイルが OSX 以前の Mac システムからのものである場合はこれを行います – do tr '\r' '\n'.

于 2012-10-23T14:10:12.347 に答える
0

^M が最後の文字ではないのは奇妙ですが、次のようになります。

sed -e 's/^M*\$$//g' <badfile >goodfile

または、「sed -i」を使用してその場で更新します。(「^M」は、 を押してコマンド ラインに入力することに注意してくださいCTRL-V CTRL_M)。

更新: 「^M$」はファイルにはなく、VI で表示されるため、質問が間違っていることが確認されています。彼は実際には、CRLF ペアを LF だけに変更したいと考えています。

sed -e 's/^M$//g' <badfile >goodfile

于 2012-10-23T13:44:25.100 に答える