将标题添加到制表符分隔的文件

我想添加一个标头分隔的文件,但我不知道如何在Linux中的一行。

让我们说我的文件是:

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

现在我想添加一个标题,说:

 name\tage\tuniversity\tcity 

我将如何在Linux中的一行? 我可以用awksed,cat等不熟悉perl。

没有像“append”操作符那样的“前置”操作符,但可以将头文件写入临时文件,然后将文件内容复制到临时文件中,然后将其移回:

 echo -e "name\tage\tuniversity\tcity" | cat - yourfile > /tmp/out && mv /tmp/out yourfile 
 $ { 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 

我个人会用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 
 perl -i -lne 'if($.==1){print "newline\n$_"}else{print}' your_file 

首先用标题内容创建一个文件:

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

(其中^I是制表键)

然后把它加到数据上

 $ cat header myfile >newfile $ mv newfile myfile 
 cat <(head -1 theFileWithHeader) theFileWithoutHeader > newfile; mv newfile theFileWithoutHeader;