2012-10-15 20 views
7

タブ区切りファイルにヘッダーを追加したいが、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で全く馴染みがないのは大丈夫です。

+0

あなたはファイルの先頭にテキスト/ヘッダーの行を配置する方法を求めているのですか? – newfurniturey

+0

はい。私はあなたがすでに答えているのを見ることができます。ありがとう。 – Dnaiel

答えて

12

「追加」演算子>>のような「前置」演算子はありませんが、一時ファイルにヘッダーを書き込んだり、ファイルの内容を一時ファイルにコピーして後ろに移動することができます。

echo -e "name\tage\tuniversity\tcity" | cat - yourfile > /tmp/out && mv /tmp/out yourfile 
+2

これは良いテクニックですが、catがその入力を見る場合は 'cat-yourfile'が必要です。 (つまり、 '-'をcatの引数として明示的に指定する必要があります。) –

+0

@WilliamPursellあなたは絶対に正しく入力します。私のためにそれをキャッチしてくれてありがとう! – newfurniturey

1

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

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

^Iはタブキーです)

を次にデータ

$ cat header myfile >newfile 
$ mv newfile myfile 
8
$ { printf 'name\tage\tuniversity\tcity\n'; cat orig-file; } > new-file 

それとも

にそれを先頭に追加
6

個人的にはnano -w file.txt ;-)(つまり単なるテキストエディタを使用して、当然のナノ)

である必要はありませんが、あなたには、いくつかの理由のために非対話型の環境でこれを実行したい場合、あなたはの連結のすべての種類のためのcatを使用することができます。

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

は、ヘッダを先頭に付けて、出力をfile2.txtに配置します。私は私が\tにを使用できるように引用$'...'を使用してい

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

注意:あなたは、元のファイルを上書きしたい場合は、

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

または、次のようにsedを使用することができて、それを行うことができますタブを表し、\nは改行を表します(他の置換の中でも、bashのmanページを参照してください)。このタイプの引用符付き文字列では、\\はリテラルのバックスラッシュを表します。だから、sedのために渡されたプログラムは、実際に

1 i\ 
name age  university  city 
+0

追加のQ、どのように変数名をecho $ 'name \ tage \ tuniversity \ tcity'に追加するのですか? cat - file.txt> file2.txt。つまり、$ {shellvar} \ t $ {shellvar2} \ tuniversity \ tcity 'をエコーし​​ます。 cat - file.txt> file2.txt。私はそのようにしてみて、全く動かなかった。 – Dnaiel

+2

シェル変数は二重引用符でのみ展開されるため、引用スタイルを混在させる必要があります。幸いにも、bashでは、異なる種類の引用文字列をお互いに正しく実行できるようになり、それに従って適切に結合されます。 "$ {shellvar}" $ '\ t' "$ {shellvar2}" $ '\ tuniversity \ tcity'' –

+0

すごくおかげさまで! – Dnaiel

3
perl -i -lne 'if($.==1){print "newline\n$_"}else{print}' your_file 
0
cat <(head -1 theFileWithHeader) theFileWithoutHeader > newfile; 
mv newfile theFileWithoutHeader; 
+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 17888664) – Sree

関連する問題