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

时间:2012-10-15 19:17:50

标签: linux unix sed awk cat

我想在制表符分隔文件中添加一个标题,但我不知道如何在linux中的一行中添加它。

我们说我的文件是:

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

现在我想添加一个标题:

name\tage\tuniversity\tcity

我如何在linux中的一行中做到这一点?我很好用awk,sed,cat等等,但对perl并不熟悉。

8 个答案:

答案 0 :(得分:12)

没有“prepend”运算符,如“append”运算符>>,但您可以将标题写入临时文件,然后将文件内容复制到临时文件中,然后移动它回来了:

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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分:3)

perl -i -lne 'if($.==1){print "newline\n$_"}else{print}' your_file

答案 4 :(得分:1)

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

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

(其中^I是标签键)

然后将其添加到数据

$ cat header myfile >newfile
$ mv newfile myfile

答案 5 :(得分:1)

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

答案 6 :(得分:0)

惯用的awk答案。

awk 'BEGIN { print "name\tage\tuniversity\tcity" } { print }' yourfile > /tmp/out && mv /tmp/out yourfile

答案 7 :(得分:0)

使用sed不需要临时文件

sed -i "s#^#name\tage\tuniversity\tcity#g#"

演示:


$ cat file1.txt
roger\t18\tcolumbia\tnew york\n
albert\t21\tdartmouth\tnew london\n
etc...
$ sed -i "s#^#name\tage\tuniversity\tcity#g#" file1.txt $ cat file1.txt
name    age     university      cityroger\t18\tcolumbia\tnew york\n
name    age     university      cityalbert\t21\tdartmouth\tnew london\n
name    age     university      cityetc...
$