Bash 使用awk在列中显示输出

Bash 使用awk在列中显示输出,bash,awk,Bash,Awk,如何在列中显示awk输出,而不是在前一行的末尾追加一个输出?打印命令将以新行终止输出,因此您可以看到每个数据项都放在新行上 如果用printf替换print,则每个输出都将保留在“当前”输出行,即输出的末尾不会放置新行字符 请记住,您需要明确指定字段分隔符,例如空格、制表符,例如: printf "%s\t",$4 # will print field $4 followed by a tab 然后,当您想要终止一行时,您可以运行print或printf\n将新行字符添加到输出的末尾 假设需要

如何在列中显示awk输出,而不是在前一行的末尾追加一个输出?

打印命令将以新行终止输出,因此您可以看到每个数据项都放在新行上

如果用printf替换print,则每个输出都将保留在“当前”输出行,即输出的末尾不会放置新行字符

请记住,您需要明确指定字段分隔符,例如空格、制表符,例如:

printf "%s\t",$4 # will print field $4 followed by a tab
然后,当您想要终止一行时,您可以运行print或printf\n将新行字符添加到输出的末尾

假设需要一个选项卡作为字段分隔符,可以将各种awk命令组合成一个命令,如下所示:

$ awk '
/^Query= /     {split($0, a, ".") ; printf "solani.%s\t",a[4]}
/^$/           {q=1}
/Length/ && q  {split($0, b, "=") ; printf "%s\t",b[2]}
/./            {q=0}
/^>/           {split($0, c, ".") ; printf "dadantii.%s\n",c[4] }
' file

solani.1        76      dadantii.2053

可能最简单的方法是输出选项卡,而不是换行符。也就是说,使用printf%s\t,solani.a[4]而不是print solani.a[4]您将最终没有尾随的换行符,但这很容易修复。是的,就是它!更新了我的帖子sorryummm,您添加了第二组输出值;这些文件是来自同一个源文件,还是来自不同的源文件;换句话说。。。您希望从单个文件中提取多少组输出?如果您可以从一个文件中提取多个数据集,请更新您的问题,以显示源文件中的两个数据集是什么样子的现在好点了吗?不太好。。。现在您已经说明了数据来自一个单独的文件,好吧,这是很好的了解,但它仍然有助于获得原始数据文件的扩展样本,以查看两组数据的外观。例如,两个输出记录的原始源数据是什么样的:solani.1/76/dadanti.2053和solani.2/39/dadanti.2054