いくつかのテキストファイル(sar
からの出力)を編集し、CSVファイルに変換する必要があります。
Sed関数またはawk関数(Linuxの簡単なシェルスクリプト)を使用して、すべての空白(おそらく、出力内の数字の間のタブ)を変更する必要があります。
誰も私を助けることができますか?私が使用したすべてのコマンドは、ファイルをまったく変更しませんでした。 gsub
を試しました。
tr ' ' ',' <input >output
各スペースをコンマで置き換えます。必要に応じて、-sフラグ(繰り返しの絞り込み)を使用してパスを作成できます。これにより、SET1(空白スペース)にリストされている繰り返し文字の各入力シーケンスが単一のオカレンスに置き換えられますキャラクター。
代替タブの後に使用されるスクイーズリピートの使用:
tr -s '\t' <input | tr '\t' ',' >output
次のようなものを試してください:
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
このすべてにおいて、空白文字で区切られたファイル内の項目には、保持したい独自の空白文字が含まれていないことに注意する必要があります。二つの単語。
入力ファイルを見ずに、推測だけ
awk '{$1=$1}1' OFS=","
別のファイルにリダイレクトし、必要に応じて名前を変更します
このようなものはどうですか:
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」のような名前に変更する必要がある場合でも)
このコマンドは機能するはずです:
sed "s/\s/,/g" < infile.txt > outfile.txt
出力を新しいファイルにリダイレクトする必要があることに注意してください。入力ファイルはその場で変更されません。
sedはこれを行うことができます:
sed 's/[\t ]/,/g' input.file
それはコンソールに送信され、
sed -i 's/[\t ]/,/g' input.file
ファイルをその場で編集します
ファイルをその場で編集するPerlスクリプトを次に示します。
Perl -i.bak -lpe 's/\s+/,/g' files*
連続する空白は、単一のコンマに変換されます。
各入力ファイルは.bakに移動されます
これらのコマンドラインオプションが使用されます。
-i.bak
インプレース編集して.bakコピーを作成
-p
入力ファイルのすべての行をループし、その行を自動的に出力します
-l
は、処理前に改行を削除し、その後でそれらを再び追加します
-e
Perlコードを実行します
空白文字(タブ、スペース)の任意のシーケンスを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