テキストのすべての行を1行にしたい。私はコーディングをすることで学ぶことを試みる初心者です。この問題を解決するために4時間を費やしました。この問題には簡単な解決策があることは知っています。これが私がやってきたことです。
sed -e 'N; s/\ n //' myfile.txt #Does nothing sed -e:a -e N -e 's/\ n// '-e ta myfile.txt #output all messed up and not the head or tail of the syntax cat myfile.txt | tr -d '\ n'> myfile.txt#すべての行を削除します
テキストファイルは次のとおりです。
500212 262578-4-4 23200 GRIFFITH LABORATORIES LTD GRIFFITH LABORATORIES 南ダブリン郡議会 OFFICE OFFICE(INDUSTRIAL) Rateable 2 Pineview Industrial Estate Firhouse Road Knocklyon 2007年12月31日 2008年1月1日」
どこが間違っているのかわかりません。
tr
使用したとおりshould動作し、最も簡単です-必要なことは別のファイルへの出力 。入力ファイルを出力として使用すると、観察したとおり、結果は空のファイルになります。
cat myfile.txt | tr -d '\ n'> oneline.txt
一部のエディターは、行を\r\n
で終了することを覚えておく必要があります。その場合、使用
cat myfile | tr -d '\r\n'
ここにあります。それは別の解決策であり、シンプルで簡単です。
echo $(cat Input.txt) > Output.txt
単純な方法
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メソッドを使用すると、スペースとすべての文字を含めることができます。
これが役立つことを願っています!
ラベル:a
をメイン命令の外に配置する必要はありません。また、-e
オプションも必要ありません。最後に、/$/
は不要です(すべての行にEOL文字があります)。
他の答えを改善すると、
sed -i ':a; N; s/\n/ /; ta' file
次のように書けばより明確になります。
sed -i ':a
N
s/\n/ /
ta' file
コマンドは次のように機能します。
N
は、次の行を(複数行の)パターンスペースに追加します。これには、現在の行が既に含まれています。s/\n/ /
は、N
によって生成された改行文字\n
をスペースに置き換えます。ta
は、ラベル:a
に続くスクリプト行に移動しますステップ2の置換が成功した限り、ie置換が発生した場合、実行はスクリプトの終わりを「ヒット」せずにステップ1にジャンプしますiewithout入力の別の行を読み取ります。次のことに注意してください。
sed
は、入力ファイルの行を1つずつ順番に読み取ります。1行目から;:a
は単なるラベルであり、実行されるコマンドではありません。N
は、原則として、任意の行で実行されますが、s/\n/ /
(原則として任意の行で実行)は成功最後の行以外の行でta
はスクリプトの終わりを到達可能にします入力の最後の行が読み取られた場合のみ(s
が失敗する唯一の行)p
コマンドが実行されます。したがって、スクリプトは基本的に入力の1行目を読み取り、改行をスペースで置き換えるたびに次の行を1つずつ追加し続けます。 最後の行が追加された後(およびスペースで\n
が変更された)、N
は行を追加できず、s
は失敗し、ta
スキップされ、スクリプトの最後に到達し、暗黙のp
rintステートメントが現在の1行のパターンスペースで実行されます。
-i
オプションは、入力ファイルfile
を1行のパターンスペース全体に置き換えます。
\n
を検索してスペース ''に置き換えます。
「検索」->「置換」を選択すると、置換ウィンドウを表示できます
またはkeybpardショートカット経由 Ctrl+H
以下のスクリーンショットをご覧ください。
元のテキストは1〜14行目にあります。
結果は16行目にあります。
これを試して
sed -e :a -e '/$/N; s/\n/\\n/; ta' [filename]
http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/
Pythonのアプローチ:
python -c "import sys; print(' '.join([ l.strip() for l in sys.stdin.readlines() ]))" < input.txt
AWK:
awk '{printf "%s ",$0}' /etc/passwd
vim <your_file>
Vim内に入力してEnterを押します。
:% s/\n/ /g
純粋なbashソリューション:
while read i; do printf '%s ' "$i"; done < file.txt > outfile.txt
Yourfile.txtの出力を目的の結果であるnewfile.txtにリダイレクトするようにsedに指示する必要があることを単に忘れていたと思います。これは必要なコマンドのように見えますが、マージしようとしているファイルがsedのバッファーに対して大きすぎない場合にのみ:sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txt
。 別のフォーラム に感謝します。ここでは、sedの機能について説明しています。コマンドをテストしましたが、うまくいきました。
それが私だったら、vimでそれを開いて押します Shift+J 何回か。