bash - 将 2 行组合在一起但 "interlaced"

标签 bash perl awk sed

我有 2 行输出如下:

a b c
x y z

我想将最后一个命令的两行通过管道传输到一个脚本中,该脚本将它们“交错”组合在一起,如下所示:

a x b y c z

该解决方案应该适用于输出中的随机列数,例如:

a b c d e
x y z x y

应该导致:

a x b y c z d x e y

到目前为止,我已经尝试使用 awk、perl、sed 等...但没有成功。我所能做的就是将输出放在一行中,但它不会“交错”:

$ echo -e 'a b c\nx y z' | tr '\n' ' ' | sed 's/$/\n/'
a b c x y z

最佳答案

将奇数记录的字段保存在一个数组中,并使用它更新偶数记录的字段。这将交错输入中的每对连续行。

prog | awk 'NR%2{split($0,a);next} {for(i in a)$i=(a[i] OFS $i)} 1'

关于bash - 将 2 行组合在一起但 "interlaced",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57663951/

相关文章:

perl - 使用 perl 的 qx{}/ `...` 运算符和参数列表

mysql - 如果 MySQL 数据库连接失败,则将 SQL 查询记录到文件

bash - 使用 unix 工具和多列排序

linux - 以相反的顺序删除重复的词对

linux - 条件中的 Bash 脚本通配符

json - 使用 jq 从 JSON 文件中提取某些信息

mysql - 将 mysql 结果存储在 bash 数组变量中

perl - 如何将可选参数传递给 Perl 函数?

shell - 如何过滤掉./gradlew project:dependencies命令的特定部分?

git - 查找最近的好提交以传递给 git bisect