web-dev-qa-db-ja.com

Linuxのテキストファイルで空白をカンマに置き換えます

いくつかのテキストファイル(sarからの出力)を編集し、CSVファイルに変換する必要があります。

Sed関数またはawk関数(Linuxの簡単なシェルスクリプト)を使用して、すべての空白(おそらく、出力内の数字の間のタブ)を変更する必要があります。

誰も私を助けることができますか?私が使用したすべてのコマンドは、ファイルをまったく変更しませんでした。 gsubを試しました。

55
aye
tr ' ' ',' <input >output 

各スペースをコンマで置き換えます。必要に応じて、-sフラグ(繰り返しの絞り込み)を使用してパスを作成できます。これにより、SET1(空白スペース)にリストされている繰り返し文字の各入力シーケンスが単一のオカレンスに置き換えられますキャラクター。

代替タブの後に使用されるスクイーズリピートの使用:

tr -s '\t' <input | tr '\t' ',' >output 
78

次のようなものを試してください:

sed 's/[:space:]+/,/g' orig.txt > modified.txt

文字クラス[:space:]は、すべての空白(スペース、タブなど)に一致します。たとえば、単一の文字を置き換えるだけの場合ただスペース、それだけを使用します。

編集:実際には[:space:]にはキャリッジリターンが含まれているため、これは望みどおりに動作しない場合があります。以下は、タブとスペースを置き換えます。

sed 's/[:blank:]+/,/g' orig.txt > modified.txt

意志として

sed 's/[\t ]+/,/g' orig.txt > modified.txt

このすべてにおいて、空白文字で区切られたファイル内の項目には、保持したい独自の空白文字が含まれていないことに注意する必要があります。二つの単語。

27
dave

入力ファイルを見ずに、推測だけ

awk '{$1=$1}1' OFS=","

別のファイルにリダイレクトし、必要に応じて名前を変更します

25
ghostdog74

このようなものはどうですか:

cat texte.txt | sed -e 's/\s/,/g' > texte-new.txt

(はい、いくつかの役に立たないcattingとパイピングで、また<を使用してファイルから直接読み取ることができます、私は仮定します-ファイルの内容を出力するために最初にcatを使用し、その後だけ、コマンドにsedを追加しました-line)

EDIT: @ ghostdog74がコメントで指摘したように、thet cat/pipeはまったく必要ありません。ファイルの名前をsedに与えることができます:

sed -e 's/\s/,/g' texte.txt > texte-new.txt

「texte.txt」がこの方法の場合:

$ cat texte.txt
this is a text
in which I want to replace
spaces by commas

次のような「texte-new.txt」が取得されます。

$ cat texte-new.txt
this,is,a,text
in,which,I,want,to,replace
spaces,by,commas

古いファイルを新しいファイルに置き換えるだけではありません(正しく覚えていれば、sed -iで実行できます。@ ghostdog74が言ったように、このファイルはその場でバックアップを作成できます):セキュリティ対策として、保存するのが賢明かもしれません(「texte-backup.txt」のような名前に変更する必要がある場合でも)

10
Pascal MARTIN

このコマンドは機能するはずです:

sed "s/\s/,/g" < infile.txt > outfile.txt

出力を新しいファイルにリダイレクトする必要があることに注意してください。入力ファイルはその場で変更されません。

7
Dawie Strauss

sedはこれを行うことができます:

sed 's/[\t ]/,/g' input.file

それはコンソールに送信され、

sed -i 's/[\t ]/,/g' input.file

ファイルをその場で編集します

5
ezpz

ファイルをその場で編集するPerlスクリプトを次に示します。

Perl -i.bak -lpe 's/\s+/,/g' files*

連続する空白は、単一のコンマに変換されます。
各入力ファイルは.bakに移動されます

これらのコマンドラインオプションが使用されます。

  • -i.bakインプレース編集して.bakコピーを作成

  • -p入力ファイルのすべての行をループし、その行を自動的に出力します

  • -lは、処理前に改行を削除し、その後でそれらを再び追加します

  • -e Perlコードを実行します

3
Chris Koknat

空白文字(タブ、スペース)の任意のシーケンスを1つのコンマに置き換える場合は、次を使用します。

sed 's/[\t ]+/,/g' input_file > output_file

または

sed -r 's/[[:blank:]]+/,/g' input_file > output_file

入力行の一部に余分な先行スペース文字が含まれており、カンマに変換する必要がない場合は、最初にそれらを削除してから、残りの空白文字をコンマに変換する必要があります。そのような場合、次を使用します。

sed 's/ +//' input_file | sed 's/[\t ]+/,/g' > output_file
0
H.Alzy