結合列の間に^ Mを挿入するUnix `join`コマンドを変更するには? - Unix

結合列の間に^ Mを挿入するUnix `join`コマンドを変更するには? - Unix

私は初心者のプログラマーです。私はjoin複数の長いファイルを一緒に自己結合するためにUnixコマンドを使用しています。

join -j30 test test2
col1 col2 ... col30    col1 col2 ... col30
A    B        ZZZ   ^M A    B        ZZZ

^M出力にこの文字が表示されます。

なぜそこにいるのですか?そしてどのように削除できますか?

編集:以下は私の出力セクションのスクリーンショットです。

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

答え1

^Mは、Windowsがファイルをインポートまたは編集することを意味します。

dos2unixファイルのコマンドを使用して、ファイルをUnixテキストモードに変換します。

DOSは改行と改行「\ r \ n」を行終端として使用し、Unixは改行「\ n」のみを使用します。 ^M は "追加" \r 文字を視覚的に表現したものです。

このコマンドをインストールするには: dos2unix(Debian ベースのディストリビューションで):

sudo apt-get install dos2unix

またはMac(MacPorts)で:

sudo port install dos2unix

または、sedを使用して次のようにこれを実行できます。

sed 's/\r$//' dosfile.txt > unixfile.txt

答え2

join(1)(少なくとも私が使用しているバージョンは)リンク^Mファイルに追加または入力しませjoinんが^M。 Hexビューアといくつかのテストケースで進捗状況を確認できます。

$ echo "1 a" > test1
$ echo "1 b" > test2
$ join test1 test2 | od -bc
0000000   061 040 141 040 142 012                                        
           1       a       b  \n                                        
0000006
$

^Mそして、入力ファイルにテストケースがあります:

$ perl -E "say qq(1 a\r)" > test1
$ perl -E "say qq(1 b\r)" > test2
$ join test1 test2 | od -bc
0000000   061 040 141 015 040 142 015 012                                
           1       a  \r       b  \r  \n                                
0000010
$ 

dos2unix入力ファイルを変更する方法はいくつかあります(ファイルが行区切り文字の古代のtrMacOS伝統を使用している場合は\rこれは悪い考えですが)。

$ od -bc test1
0000000   061 040 141 015 012                                            
           1       a  \r  \n                                            
0000005
$ tr -d '\r' < test1 > foo
$ mv foo test1
$ od -bc test1            
0000000   061 040 141 012                                                
           1       a  \n                                                
0000004
$ 

関連情報