各LFの前にCRを追加します。

各LFの前にCRを追加します。

bcp私はWindowsコンピュータでテキストファイルを扱っています。ユーティリティを使用してファイルのデータをデータベーステーブルにロードする前に、末尾のタブ文字を削除する必要があります。

Bashスクリプトの次のコマンドは、末尾のタブを削除します。

sed 's/[\t]*$//' < ./input/raw.txt >> ./input/data.txt

ただし、CR-LFコマンドが失敗した理由に変換されますLFbcp

維持しようとする努力の一環として、以下をCR試しLFました。

sed 's/[\t]*$/$CR/' < ./input/raw.txt >> ./input/data.txt

しかし、結果は次のようになります。

ここに画像の説明を入力してください。

必要な結果は次のとおりです。

ここに画像の説明を入力してください。

目的の出力を取得するには、コマンドをどのように変更する必要がありますか?

ベストアンサー1

このパッケージをインストールする必要がありますunix2dos。これには2つのユーティリティがあります。

unix2dos    Convert UNIX newlines to CR-LF
dos2unix    Convert DOS CR-LF to UNIX newlines

5行のテストファイルを作成し、16進ダンプを実行して行の終わりを確認します。

$ jot -w 'line %d' 5 > foo
$ hexdump -C foo
00000000  6c 69 6e 65 20 31 0a 6c  69 6e 65 20 32 0a 6c 69  |line 1.line 2.li|
00000010  6e 65 20 33 0a 6c 69 6e  65 20 34 0a 6c 69 6e 65  |ne 3.line 4.line|
00000020  20 35 0a                                          | 5.|
00000023

各行は改行文字(hex 0a)で終わることがわかります。

さて、これらの改行をDOS CR-LF行末に変換して再確認します。

$ unix2dos foo
$ hexdump -C foo
00000000  6c 69 6e 65 20 31 0d 0a  6c 69 6e 65 20 32 0d 0a  |line 1..line 2..|
00000010  6c 69 6e 65 20 33 0d 0a  6c 69 6e 65 20 34 0d 0a  |line 3..line 4..|
00000020  6c 69 6e 65 20 35 0d 0a                           |line 5..|
00000028

各行はCR-LF、hex 0d 0aで終わります。

最後に、ファイルを元のUNIX改行文字に戻すことができます。

$ dos2unix foo
$ hexdump -C foo
00000000  6c 69 6e 65 20 31 0a 6c  69 6e 65 20 32 0a 6c 69  |line 1.line 2.li|
00000010  6e 65 20 33 0a 6c 69 6e  65 20 34 0a 6c 69 6e 65  |ne 3.line 4.line|
00000020  20 35 0a                                          | 5.|
00000023

おすすめ記事