[英]Add a header to a tab delimited file
我想在制表符分隔的文件中添加一个标题,但我不确定如何在 linux 中的一行中执行此操作。
让我们说我的文件是:
roger\t18\tcolumbia\tnew york\n
albert\t21\tdartmouth\tnew london\n
etc...
现在我想添加一个标题,上面写着:
name\tage\tuniversity\tcity
我将如何在 linux 中的一行中做到这一点? 我可以使用 awk、sed、cat 等,但对 perl 完全不熟悉。
没有像“追加”运算符>>
那样的“前置”运算符,但是您可以将标头写入临时文件,然后将文件的内容复制到临时文件中,然后将其移回:
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
;-) (即只需使用文本编辑器,当然不必是 nano)
但是,如果您出于某种原因想在非交互式环境中执行此操作,则可以将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;
习惯性的awk
答案。
awk 'BEGIN { print "name\tage\tuniversity\tcity" } { print }' yourfile > /tmp/out && mv /tmp/out yourfile
使用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...
$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.