テキストファイルのすべての行を1行に結合するにはどうすればよいですか?


28

テキストのすべての行を1行にしたい。私はコーディングをすることで学ぶことを試みる初心者です。この問題を解決するために4時間を費やしました。この問題には簡単な解決策があることは知っています。これが私がやってきたことです。

sed -e 'N; s / \ n //' myfile.txt#何もしません

sed -e:a -e N -e 's / \ n / /' -e ta myfile.txt#すべてがめちゃくちゃになり、構文の先頭も末尾も作成できません

cat myfile.txt | tr -d '\ n'> myfile.txt#すべての行を削除します

テキストファイルは次のとおりです。

500212
262578-4-4
23200
グリフィス研究所
グリフィス研究所
南ダブリン郡議会
オフィス
オフィス(産業)
評価可能リスト
2パインビュー工業団地
ファーハウスロード
ノックリヨン
2007年12月31日
2008年1月1日」   

どこが間違っているのかわかりません。

回答:


31

tr使用したとおりに動作し、最も簡単です- 別のファイル出力する必要があります。入力ファイルを出力として使用すると、観察したとおり、結果は空のファイルになります。

cat myfile.txt | tr -d '\ n'> oneline.txt

エディタによっては、行をで終了することを覚えておく必要があります\r\n。その場合、使用

cat myfile | tr -d '\r\n'

ご協力いただきありがとうございますが、まだ機能していません。私はそれが基本的でシンプルなものであることを知っています。指定したコマンドはすべての行を削除しました。私は23200 262578-4-4 500212ファイルを投稿しようGRIFFITH LABORATORIES LTD GRIFFITH LABORATORIES SOUTH DUBLIN COUNTY COUNCILオフィスオフィス(INDUSTRIAL)一覧Rateable 2 Pineview工業団地Firhouse道路Knocklyon 2007年12月31日2008年1月1日だ
ジョン

@JOhn:結果またはエラーは何ですか?
ISH

回答を編集して投稿するつもりでした。コマンドを使用した後、ファイルは空白でした。ターミナル「cat reval_details.asp?Pno = 500211.txt | tr -d '\ n'> reval_details.asp?Pno = 500211.txt」では、このように見えました。再度、感謝します。
ジョン

@John:同じ出力ファイル名は使用できません!! (回答を参照)。試してみてくださいcat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
っぽい

1
これを行うより良い方法はtr -d '\n' <input.txt > output.txt-catの無駄な使用を避け、不要なパイプを1つ少なくすることです。
evilsoup

8

ここにあります。それは別の解決策であり、シンプルで簡単です。

echo $(cat Input.txt) > Output.txt

2
これがうまくいったとは信じられない
-mchid

echo `cat Input.txt` > Output.txt 動作します、ちょうど別の
バリエーション-raider33

1つの部門に複数の空白(スペース、タブ、改行など)がある場合、それらはスペースに置き換えられます。
iBug

これは素晴らしい解決策ですが、私のコンピューターでは、解決策の約3倍の時間がかかることがわかりましたtr
LS

3

簡単な方法

awkを使用する別の方法、

cat myfile.txt | awk '{print}' ORS=''

出力:

500212262578-4-423200GRIFFITH LABORATORIES LTDGRIFFITH LABORATORIESSOUTH DUBLIN COUNTY COUNCILOFFICEOFFICE(INDUSTRIAL)List Rateable2 Pineview Industrial EstateFirhouse RoadKnocklyon31 Dec 200701 Jan 2008 "

注意:

ORS = '' ->これはフィールド区切り記号です。フィールド区切り記号として、単一引用符の間に任意の文字を含めることができます。このawkメソッドを使用すると、スペースとすべての文字を含めることができます。

これが役立つことを願っています!


1
ORSは出力レコード区切り文字です。OFSは出力フィールド区切り文字です。参照thegeekstuff.com/2010/01/...のman awk
エルダーオタク

3

ラベルを:aメインの指示の外に置く必要はありません。また、-e必要なオプションも必要ありません。最後に、これ/$/は不要です(すべての行にEOL文字があります)。

他の答えを改善すると、

sed -i ':a; N; s/\n/ /; ta' file

次のように書けばより明確になります。

sed -i ':a
        N
        s/\n/ /
        ta' file

コマンドは次のように機能します。

  1. N 次の行を(複数行の)パターンスペースに追加します。これには、現在の行が既に含まれています。
  2. s/\n/ /\n生成された改行文字をNスペースで置き換えます
  3. ta:a ステップ2の置換が成功する限り、ラベルに続くスクリプト行に移動します。つまり、置換が発生した場合、スクリプトの最後を「ヒット」せずにつまり 入力の別の行を読み取らずにステップ1にジャンプします。

次のことに注意してください。

  • sed入力ファイルの行を、1行目から順番に1行ずつ読み取ります。
  • :a 実行されるコマンドではなく、単なるラベルです。
  • N 原則として、任意の行で実行されますが、
  • s/\n/ /(原則として任意の行で実行されます)最後の行以外のすべての行で成功しますので、
  • ta入力の最後の行が読み取られたときにのみスクリプトの終わりに到達できるようにしますs失敗した唯一の行)。
  • 最後の行が読み込まれない限り、最初の行が読み込まれた後、それ以上の入力行はパターン空間に読み込まれませんが、それ以上読み込む行がなく、暗黙的なコマンドが実行されます。p

したがって、スクリプトは基本的に入力の1行目を読み取り、改行をスペースで置き換えるたびに次の行を1つずつ追加し続けます。後、最後の行を追加(とされる\nスペースに変更)、N任意の行を追加することができない、s失敗し、taスキップされ、スクリプトの終わりに達した、と暗黙のpRINT文は現在looong 1行のパターンスペース上で実行されます。

この-iオプションは、入力ファイルfileを1行のパターンスペース全体に置き換えます。


2

GEDIT:

検索\nしてスペース ''に置き換えます。
[検索]-> [置換]に移動する
か、keybpardショートカットCtrl+H

以下のスクリーンショットをご覧ください。

元のテキストは1〜14行目にあります。
結果は16行目にあります。

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




0

yourfile.txtの出力を目的の結果であるnewfile.txtにリダイレクトするようにsedに指示する必要があることを単に忘れていたと思います。これは必要なコマンドのように見えますが、マージしようとしているファイルがsedのバッファーに対して大きすぎない場合のみですsed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt。功績ここで別のフォーラム彼らはのsedの能力を議論します。コマンドをテストしましたが、うまくいきました。


1
実際、スイッチを使用してsed-i実行すると元のファイルがインラインで変更されるため、別のファイルに出力する必要はありません。しかし注意してください!
ISH

sed -e:a -e N -e 's / \ n / /' -e ta reval_details.asp?Pno = 500214.txt 2008年1月1日産業団地sed -i:a -e N -e 's / \ n / / '-e ta reval_details.asp?Pno = 500214.txt sed:a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to a' sed へのジャンプのラベルが見つかりません-e:a -e N -i 's / \ n / /' -e ta reval_details .asp?Pno = 500214.txt sed:s / \ n /を読み取れません/:そのようなファイルまたはディレクトリはありません#任意のアイデア。
ジョン

@Mikまだ運がありませんが、返信ありがとう。
ジョン

テキストをテキストエディターにコピーして貼り付け、ファイルを保存してからsedコマンドを使用して、nanoで開いたときにすべてが1行に表示されるようにしました。ただし、ターミナルでcatを使用してファイルを開くと、ファイルはラップされ、1行だけではないように見えるので、おそらくそれが起こっているのでしょう。また、sedの前にa 'は必要なく、上記のコマンドに他の不要な要素を追加したと思うので、sed -e:a -e N -e' s / \ n / / '-e taを試してくださいyourfile.txt> newfile.txtただし、30インチ以上のモニターがない限り、行は画面上で折り返されて表示されます。

@Mik投稿ありがとう。データをテキストエディターに入力して保存し、 'sed -e:a -e N -e' s / \ n / / '-e ta abc.txt> abc1.txt'と実行しました。完全に。ハレルヤ。次に 'sed -e:a -e N -e' s / \ n / / '-e ta reval_details.asp?Pno = 500215.txt> Pno = 500215.txt'と入力すると、最初の行以外のすべての行に行の先頭に追加されるスペース。皆さんの努力に感謝しますが、オクターブに移り、そこでデータを処理してみます。
ジョン




弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.