awk - awk 中的 BEGIN 和 END 块
问题描述
我在 Mac 上的终端中使用 awk 命令。我想打印一个已经存在的文件的内容,并为每一列指定一个标题,我将使用选项卡将其分开,然后我想将输出发送到另一个文件。我将使用哪一行代码为列赋予标题?我希望使用简单的 awk 命令,如果我能以尽可能少的行完成任务,最好。
到目前为止,我已经尝试使用 BEGIN 命令。(我想给出的标题是名字,名字和分数)
BEGIN { print "First Name\tSecond Name\tScore}**
然后我想打印文件的全部内容。
{print} filename.txt
最后我想将输出保存到另一个文件
End{print} filename.txt > output.txt
一起做这一切
awk 'BEGIN {print "First Name\tSecond Name\tScore";}
{print}
End{print}' filename.txt > output.txt
但是,这仅将标题保存到输出文件,而不是列下原始文件的内容。
解决方案
awk
逐行处理文件。在它开始处理文件之前,你可以让它做一些事情。我们使用BEGIN
关键字来说明下面的代码块是在处理之前执行的。与END
文件每一行处理完成后运行相同。
虽然您的代码中有一些多余的位,例如不必要的END
块,但假设您的filename.txt
.
更简洁的awk
代码是:
awk 'BEGIN {print "First Name\tSecond Name\tScore";}1' filename.txt > output.txt
在行动中(使用逗号而不是制表符,因为它更容易而且我很懒):
$ echo "1,2,3" > filename.txt
$ awk 'BEGIN {print "c1,c2,c3"}1' filename.txt > output.txt
$ cat output.txt
c1,c2,c3
1,2,3