Linux Awk帮助代码

时间:2016-12-04 22:04:34

标签: linux bash awk

我需要打印文件的内容,并为每列提供标题,留下足够的空间以便可读,然后我需要将其输出到新文件中。我跟着这个教程好了一会儿但是我已经卡住了。

http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples

这是他们使用的示例代码,这将完全给我我需要做的事情。但是当我调整它时它将不起作用。

$ awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";}
{print $2,"\t",$3,"\t",$4,"\t",$NF;}
END{print "Report Generated\n--------------";
}' employee.txt

这是我的,与示例不同,我希望打印整个文档,并不希望这个“报告生成”无意义。我尝试在结束后添加{print;}',并确保开始一个新行并且......没有。

$ awk 'BEGIN {Print "Firstname\tLastname\tPoints";} END > awktest.txt > done

我哪里出错了?它不断给我回复源代码行2。

3 个答案:

答案 0 :(得分:1)

要删除标题,只需删除从END开始直至结束的所有内容:

awk 'BEGIN {print "Name\tDesignation\tDepartment\tSalary";} {print $2,"\t",$3,"\t",$4,"\t",$NF;}' employee.txt

在你的第二个例子中,你忽略了关闭',我怀疑你又放了一个">"比需要的:

awk 'BEGIN {print "Firstname\tLastname\tPoints";}' awktest.txt > done

然而,后一个例子将默默地忽略从" awktest.txt"中读取的所有内容。

答案 1 :(得分:0)

看起来您需要的只是插入标题行,可以使用sed(以及awk)或cat

轻松完成
$ sed '1iFirstname\tLastname\tPoints' file > output.file

$ awk 'BEGIN{print "Firstname\tLastname\tPoints"} 1' file > output.file

$ cat <(echo -e "Firstname\tLastname\tPoints") file > output.file

答案 2 :(得分:0)

awk打印功能名为print,而不是Print。 idk为什么所有解决方案都在其打印语句中包含,"\t",。您不希望这样 - 您希望在脚本开头设置-v OFS='\t',然后在字段之间使用,。你想要的只是:

awk -v OFS='\t' '
BEGIN {print "Name", "Designation", "Department", "Salary"}
{print $2, $3, $4, $NF}
}' employee.txt

假设您要从数据中打印正确的字段编号。您问题中的示例输入/输出对于帮助我们回答它非常有用。