14

我想在制表符分隔的文件中添加标头,但我不确定如何在 linux 的一行中执行此操作。

假设我的文件是:

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

现在我想添加一个标题,上面写着:

name\tage\tuniversity\tcity

我将如何在 linux 的一行中做到这一点?我对 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-)(即只使用文本编辑器,当然不必是纳米)

但是,如果您出于某种原因想在非交互式环境中执行此操作,则可以使用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
于 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

^Itab键在哪里)

然后将其添加到数据中

$ cat header myfile >newfile
$ mv newfile myfile
于 2012-10-15T19:21:11.520 回答
1
cat <(head -1 theFileWithHeader) theFileWithoutHeader > newfile;
mv newfile theFileWithoutHeader;
于 2017-11-09T09:01:24.857 回答
0

习惯性awk的回答。

awk 'BEGIN { print "name\tage\tuniversity\tcity" } { print }' yourfile > /tmp/out && mv /tmp/out yourfile
于 2020-03-14T09:41:14.557 回答
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...
$

于 2020-03-14T12:51:12.137 回答