【问题标题】:How can I combine two multi-line output commands?如何组合两个多行输出命令?
【发布时间】:2019-04-04 04:03:22
【问题描述】:

我有两个命令,每个命令都输出多行,我想以一种在每个组合行之间有一个空格的方式组合它们。

这些过大的命令应该导入一个 airodump-ng csv 文件,然后从文件中提取两列数据。然后,他们清理我不需要的任何额外字符。

  1. sed -n '/Station/q;p' schoolscan-02.csv | sed '/^[[:space:]]$/d' | sed -n '1!p' | awk -F "\",\"*" '{print $4}' | tr -d''

  2. sed -n '/Station/q;p' schoolscan-02.csv | sed '/^[[:space:]]$/d' | sed -n '1!p' | awk -F "\",\"*" '{print $1}'

命令 #1 输出:

一个

b

c

d

命令 #2 输出:

1

2

3

4

我希望输出看起来像:

一个1

b 2

c 3

d 4

我可以使用什么命令以这种方式组合这两个命令?

【问题讨论】:

  • 你是如何运行命令的?您是否将它们的输出存储在单独的文件中?
  • 对不起,我应该把我在原始帖子中使用的命令。我现在添加了它们。
  • 将 schoolscan-02.csv 添加到您的问题中。
  • 当您不需要将 schoolscan-02.csv 拆分为 2 行命令时,您不需要将它们放在一起。

标签: bash


【解决方案1】:

使用paste 并同时提供两个流(一个用于命令):

paste -d' ' <(sed -n '/Station/q;p' schoolscan-02.csv | sed '/^[[:space:]]$/d' | sed -n '1!p' | awk -F "\",\"*" '{print $4}' | tr -d ' ') <(sed -n '/Station/q;p' schoolscan-02.csv | sed '/^[[:space:]]$/d' | sed -n '1!p' | awk -F "\",\"*" '{print $1}')

无论如何,我可以看到awks 的输入是相同的。我很确定您可以通过一次执行 awk 来实现您的目标。

【讨论】:

  • 这行得通,但是,我不得不再次重新复制我的命令,而不是直接复制你所拥有的。您的命令并没有完全删除我需要正确删除的内容。非常感谢! :)
  • 我只是复制了你的命令,没有对它们进行任何修改。简而言之,建议是paste -d' ' &lt;(your first command) &lt;(your second command)
【解决方案2】:

鉴于您的程序各自的输出位于文件 12 中,您可以像这样使用 paste 逐行组合它们:

paste -d' ' 1 2

【讨论】:

  • paste -d' ' &lt;(sed ... | sed ... | sed ... | awk ... | tr ...) &lt;(sed ... | sed ... | sed ... | awk ...)
猜你喜欢
  • 2019-08-27
  • 2021-07-27
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2012-09-02
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
相关资源
最近更新 更多