2012-10-15 88 views
7

我想將標題添加到製表符分隔文件,但我不確定如何在Linux中的一行中執行此操作。將標題添加到製表符分隔文件

讓我們說我的文件是:

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

,現在我想添加一個頭,說:

name\tage\tuniversity\tcity 

我會怎麼做,在Linux中一行?對於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 - yourfile'。 (也就是說,你必須明確地給出'-'作爲貓的參數。) –

+0

@WilliamPursell你是絕對正確的 - 對我來說是錯字;謝謝你爲我抓到! – newfurniturey

1

首先創建與插頭內容的文件:

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

(其中^I是tab鍵)

然後在前面加上它到數據

$ cat header myfile >newfile 
$ mv newfile myfile 
8
$ { 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 
6

就我個人而言,我會去與nano -w file.txt ;-)(即只使用文本編輯器,並不一定是當然的納米)

但是,如果你想做到這一點由於某種原因非交互式環境中,你可以使用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 

請注意,我使用$'...'引用,以允許我使用\t來代表選項卡和\n代表換行符(在其他替換中;請參閱bash手冊頁以獲取更多信息)。在這種引用的字符串中,\\表示文字反斜槓。因此,傳遞給sed的程序實際上是

1 i\ 
name age  university  city 
+0

額外的Q,我將如何添加一個變量名到echo $'name \ tage \ tuniversity \ tcity'中? cat - file.txt> file2.txt。 I.e.,echo $'$ {shellvar} \ t $ {shellvar2} \ tuniversity \ tcity'| cat - file.txt> file2.txt。我那樣試過,根本沒有工作。 – Dnaiel

+2

Shell變量只在雙引號內擴展,所以您將不得不混合引用樣式。幸運的是,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

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/17888664) – Sree

相關問題