【问题标题】:unix: How can I save and display my results in columns and not as a huge string?unix:如何将结果保存并显示为列而不是大字符串?
【发布时间】:2019-07-08 05:44:20
【问题描述】:

我在下面有这段代码,我希望它在列中显示我的结束结果。但相反,它将它们保存在一个大字符串中。有人有什么想法吗?

echo -n Insert the filename
read input

Region=$(awk '{for(i=1;i<=NF;i++)if($i=="EVENT")print $(i+2),$(i+3),$(i+4)}' $input)
part1=$(awk '/EVENT/{nr[NR+2]}; NR in nr' $input | awk '{print $1,$2,$5,$6,$7}' $part1 | sed 's/\// /g' $part1 | sed 's/f/    /g' $part1)
part2=$(awk '/EVENT/{nr[NR+6]}; NR in nr' $input | awk '{print $2}' $part2)
echo "$part1 $part2 $Region"

Pattern EVENT 在文件中多次显示,基于此我创建了 3 个“变量”。

我的结果应该是这样的:

String1 String2 Region
String1 String2 Region
String1 String2 Region 
...

而是显示为:

Part1 Part1 Part1 Part1 ... Part2 Part2 Part2 ... Region Region Region ...

更新: 我在最后一个回显中添加了“...”,现在我在一个巨大的列中得到了我的结果。 像这样:

Part1
Part1
Part1
...
Part2
Part2
...
Region
Region
Region
...

【问题讨论】:

  • 能否将您的echo 语句更改为echo "$part1 $part2 $Region" 一次,然后告诉我们进展如何?
  • 我添加了“”,现在它给了我一个大专栏。您是否碰巧知道一种使它们彼此相邻的方法?非常感谢您的帮助
  • 请在代码标签中的帖子中发布输入和预期输出示例,以便我们更好地理解这个问题。
  • 你为什么要在part1的赋值中使用$part1,在part2的赋值中使用$part2?

标签: loops unix awk sh


【解决方案1】:

您可以将命令的结果存储在 array 变量中,并使用for 循环从三个变量并行输出,例如:

$ a1=( $( echo a b c d ) )
$ a2=( $( echo A B C D ) )
$ a3=( $( echo A3 B3 C3 D3 ) )
$ for ((i=0; i < ${#a1[@]}; i++ )); do
>     echo ${a1[i]}, ${a2[i]}, ${a3[i]}.
> done
a, A, A3.
b, B, B3.
c, C, C3.
d, D, D3.
$

与不使用数组变量的版本对比(注意少了一级括号)

$ a1=$( echo a b c d ) ; a2=$( echo A B C D ) ; a3=$( echo A3 B3 C3 D3 )
$ echo $a1 $a2 $a3
a b c d A B C D A3 B3 C3 D3
$ 

【讨论】:

    【解决方案2】:

    bash 中的组合列是与paste

    例如

    $ paste <(echo -e "a\nb\nc") <(echo -e "1\n2\n3")
    
    a       1
    b       2
    c       3
    

    您很可能可以在一个 awk 脚本中完成所有操作,但不清楚您在发布的脚本中要实现的目标;您的变量名也作为文件名出现在右侧。

    【讨论】:

      猜你喜欢
      • 2021-01-18
      • 2019-07-12
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多