基本上我试图打印一个每行有 4 个字段的表,第 5 个字段应该一直到第二行到第 8 个字段。
awk 'BEGIN{
FS=" "
print "<HTML><BR><h2><CENTER><BODY> DETAILS </BODY></CENTER> </h2> <BR><CENTER><table border=1> <CENTER>"
print "<TR><TH>No</TH><TH>Name</TH><TH>task</TH><TH>location</TH></TR>"
}
{
printf "<TR>"
for(i=5;i<=NF;i++)
printf "<TD><CENTER>%s</CENTER></TD>", $i
print "</TR>"
}
END{
print "</TABLE></HTML>"
}' /home/xyz/found.txt
我不想要我现在得到的下面的内容。它的打印本身在同一行上。
No Name task Location
1001 Mike Texting US 1002 Mark Chatting UK
它应该是
No Name task Location
1001 Mike Texting US
1002 Mark Chatting UK
您能否提一些建议。
答案1
您可以使用如下方式按每 4 个字段的行打印文件:
$ cat file7
abc,def,ghi,nop,klm,one,two,three,four,five,six,nine
$ awk -v RS="," '{printf("%s%s",$0,(NR%4==0?"\n":RS))}' file7
abc,def,ghi,nop
klm,one,two,three
four,five,six,nine
使用自定义 RS(记录分隔符),您可以利用 NR(行号)并将原始文件的每个字段处理为单独的记录/单独的行。
如果您需要标头,可以在 awk 的 BEGIN 部分打印标头。
PS:如果您的字段由空格分隔,请相应调整 RS(记录分隔符):
$ awk -v RS=" " '{printf("%s%s",$0,(NR%4==0?"\n":RS))}' file7