【问题标题】:Printing array contents in the same line in awk在 awk 的同一行中打印数组内容
【发布时间】:2019-07-14 02:43:37
【问题描述】:

我有一个脚本,我需要在前一个打印语句的同一行中打印数组内容。这里array is dynamic in size 我已经有一个打印语句显示列输出。

例如:让数组有 3 个内容(arr[1]=2,arr[2]=4,arr[3]=6),min=100,max=200。我有打印语句,它正在打印列式结果。

gawk '{
  ...
  ...
print "Min:" min "\tMax:" max 
for (itr in arr)
print arr[i] " "

}' script.txt

预期输出:

Min:100  Max:200  2 4 6 

我的输出:

Min:100 Max:200
2
4
6

请给我一个方法,如何将数组内容附加到以前的打印结果中。

【问题讨论】:

  • for (itr in arr) print arr[i] 绝对不会产生该输出(i vs itr)。如果您需要帮助,请告诉我们minimal reproducible example

标签: arrays shell awk


【解决方案1】:

尝试使用 echo 它有 -n 选项以跳过最后打印换行符。

gawk '{
  ...
  ...
echo -n "Min:" min "\tMax:" max 
for (itr in arr)
echo -n arr[i] " "

}' script.sh

另一种方法

gawk '{
  ...
  ...
printf "Min:" min "\tMax:" max 
for (itr in arr)
printf arr[i] " "

}' script.sh

请参考echo 文档。

【讨论】:

  • echo -n替换print后,看不到任何输出。
  • 检查另一种方法来做同样的事情。
  • 是的,正在发生。谢谢!!
  • 这绝对是错误的。 echo 是一个 shell 命令,而不是一个 awk 命令,所以 echo -n "Min:" 表示 concatenate the string contained in the variable named n with the string "Min:" then convert that to a number before subtracting it from the value contained in the variable named echo。因此没有输出。至少printf 是一个 awk 命令,但您永远不应该按照此答案中显示的方式使用它,因为它将输入数据放在格式字符串应该在的位置,因此如果/当输入包含格式化字符时,它将神秘地失败。它还会留下一个尾随空白并且没有终止换行符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多