14

タブ区切りファイルにヘッダーを追加したいのですが、Linux で 1 行で行う方法がわかりません。

私のファイルは次のとおりです。

roger\t18\tcolumbia\tnew york\n
albert\t21\tdartmouth\tnew london\n
etc...

そして今、次のようなヘッダーを追加したいと思います:

name\tage\tuniversity\tcity

Linuxで1行でそれを行うにはどうすればよいですか? awk、sed、cat など、perl にまったく慣れていなくても問題ありません。

4

8 に答える 8

19

「append」演算子のような「prepend」演算子はありませんが>>、ヘッダーを一時ファイルに書き込み、ファイルの内容を一時ファイルにコピーして、元に戻すことができます。

echo -e "name\tage\tuniversity\tcity" | cat - yourfile > /tmp/out && mv /tmp/out yourfile
于 2012-10-15T19:22:10.473 に答える
9
$ { printf 'name\tage\tuniversity\tcity\n'; cat orig-file; } > new-file

または

$ printf '1\ni\nname\tage\tuniversity\tcity\n.\nw\n' | ed -s orig-file
于 2012-10-15T19:21:56.510 に答える
6

個人的にはnano -w file.txt;-)(つまり、テキストエディタを使用するだけで、もちろんnanoである必要はありません)

ただし、何らかの理由で非対話型環境でこれを実行したい場合はcat、あらゆる種類の連結に使用できます。

echo $'name\tage\tuniversity\tcity' | cat - file.txt > file2.txt

ヘッダーを付加し、出力をに配置しますfile2.txt。元のファイルを上書きしたい場合は、それを行うことができます

echo $'name\tage\tuniversity\tcity' | cat - file.txt > file2.txt; mv file{2,}.txt

sedまたは、次のように使用できます。

sed -i $'1 i\\\nname\tage\tuniversity\tcity' file.txt

タブを表し、改行を表す$'...'ために引用符を使用していることに注意してください(他の置換の中でも、bashのmanページを参照してください)。このタイプの引用符で囲まれた文字列では、文字列の円記号を表します。つまり、sedに渡されるプログラムは実際には\t\n\\

1 i\
name    age     university      city
于 2012-10-15T19:45:05.360 に答える
3
perl -i -lne 'if($.==1){print "newline\n$_"}else{print}' your_file
于 2012-10-16T06:09:57.510 に答える
1

まず、ヘッダーの内容を含むファイルを作成します。

$ cat >header
name^Iage^Iuniversity^Icity (return)
^D

^Iタブキーはどこにありますか)

次に、それをデータの前に追加します

$ cat header myfile >newfile
$ mv newfile myfile
于 2012-10-15T19:21:11.520 に答える