如何使用awk在文本文件的第一行之前添加空行

如何使用awk在文本文件的第一行之前添加空行,awk,Awk,我有一些文本文件。我想在每个文本文件的第一行之前添加一个空行。我如何使用awk实现这一点?这应该可以- awk 'NR==1{a=$0; print ""; next} NR==2{print a; print $0; next}1' file 对于多个文件- awk 'FNR==1{a=$0; print ""; next} FNR==2{print a; print $0; next}1' file1 file2 file3 这将在数据文件的开头提供一个空格: awk 'BEGIN{p

我有一些文本文件。我想在每个文本文件的第一行之前添加一个空行。我如何使用awk实现这一点?

这应该可以-

awk 'NR==1{a=$0; print ""; next} NR==2{print a; print $0; next}1' file
对于多个文件-

awk 'FNR==1{a=$0; print ""; next} FNR==2{print a; print $0; next}1' file1 file2 file3

这将在数据文件的开头提供一个空格:

 awk 'BEGIN{printf(" ")}1' data.txt
或者,这将在数据文件的开头提供一个空行

 awk 'BEGIN{print""}1' data.txt

不需要
awk

echo -n ' ' | cat - file

对于此任务,我更愿意使用
GNU-sed

在文件开头添加空格:

sed '1s/.*/ &/' file.txt
sed '1i\\' file.txt
要对扩展名为
.txt
的多个文本文件执行此操作,并直接对文件进行更改(即覆盖文件),请尝试:

在文件开头添加空行:

sed '1s/.*/ &/' file.txt
sed '1i\\' file.txt
要对扩展名为
.txt
的多个文本文件执行此操作,并直接对文件进行更改(即覆盖文件),请尝试:


使用perl进行内联操作:

perl -i -ne 'if(eof){$.=0;}if($.==1){print "\n";}print' temp temp2

temp和temp2是两个不同的文件。执行此命令后,将自动在每个文件的开头添加一个空行。

是否需要awk?或者任何unix命令链都能工作吗?非常感谢您的回答。您的代码可以完美地用于单个文件。您能帮我更改多个文件的代码吗?@user1606106当然可以,对多个文件使用
FNR
而不是
NR
,并在命令末尾传递每个文件。非常感谢。如何直接对文件进行更改?@user1606106
awk
不提供内嵌替换。您可能需要在循环中执行此操作并重定向到新文件。谢谢您的回答。您的代码不能用于多个文件。@user1606106:对不起,我忘了添加
-I
标志。它现在应该像预期的那样工作。HTH.您可以放弃for循环,改用
-s
。@steve谢谢您的回答。其实我想在第一行前加一个空行,我想我的问题不清楚,我已经修改了我的问题。很抱歉如果可以,请编辑您的答案。@user1606106:我已更新我的答案,在单个文件和多个文件的第一行之前添加一个空行。HTH.如果您有GNU awk可用,
BEGINFILE
将对多个文件有用。或者在添加换行符时,
echo | cat-file