0

タブ区切りファイルに 1 の列を追加したいと考えています。ファイルは次のようになります。

#> cat /tmp/myfile
Aal     Fisch_und_Fleisch
Aalsuppe        Fisch_und_Fleisch

私がやりたかった方法は、行全体を一致させ、新しい列と一緒に印刷することです。ただし、追加の列は行末ではなく行の途中に書かれています。

#> cat /tmp/myfile | sed 's#^\(.*\)$#\1\t1#g'
Aal     1isch_und_Fleisch
Aalsuppe1       Fisch_und_Fleisch

ただし、手動で作成した行で健全性チェックを行うと、次のように機能します。

#> echo -e "aaaaaaaaaa\taaaaaaaaaaaa\nbbbbbbb\tbbbbbbbb" | sed 's#^\(.*\)$#\1\t1#g'
aaaaaaaaaa      aaaaaaaaaaaa 1
bbbbbbb bbbbbbbb        1

エンコーディング/改行の問題である可能性があると思いました。これfileが言っていることです:

#> file /tmp/myfile
/tmp/myfile: ASCII text, with CRLF line terminators

エンコーディング/改行の問題である場合、どうすればよいですか?

4

2 に答える 2

3

正確な問題を再現することはできませんが、以前に同様の問題を見たことがあります。基本的に、CRLF の行末は視覚的な表示がおかしくなる可能性があります。これは、CR 部分であるキャリッジ リターンによって、カーソルが新しい行の先頭ではなく、同じ行の先頭に移動する可能性があるためです。おそらく最も簡単なのは、Unix スタイルのエンディングに切り替えることです。

Unix スタイルのエンディングに切り替えるには、次のいずれかを使用します。

dos2unix
tr -d '\r'

全体として、何か

cat /tmp/myfile | dos2unix | sed 's#^\(.*\)$#\1\t1#g'

元に戻す必要がある場合は、 を使用できますunix2dos

于 2013-02-08T12:07:48.317 に答える
1

これはうまくいくかもしれません(GNU sed):

sed 's/$/\t1/' file
于 2013-02-08T11:43:42.873 に答える