bcp
私はWindowsコンピュータでテキストファイルを扱っています。ユーティリティを使用してファイルのデータをデータベーステーブルにロードする前に、末尾のタブ文字を削除する必要があります。
Bashスクリプトの次のコマンドは、末尾のタブを削除します。
sed 's/[\t]*$//' < ./input/raw.txt >> ./input/data.txt
ただし、CR
-LF
コマンドが失敗した理由に変換されますLF
。bcp
維持しようとする努力の一環として、以下を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