Nushell
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
安装 Nu !
快速开始
  • Nushell 之书
  • 命令参考列表
  • 实战指南
  • 语言参考指南
  • 贡献指南
博客
  • English
  • 中文
  • Deutsch
  • Français
  • Español
  • 日本語
  • Português do Brasil
  • Русский язык
GitHub
  • 实战指南

    • 实战指南
    • 设置
    • 帮助
    • 系统
    • 解析
    • 外部 Shell 脚本
    • 模式匹配
    • 自定义补全器
    • 外部命令补全器
    • 模块的应用
    • 处理文件
    • Git
    • 解析 Git 日志
    • 使用 input listen 对按键进行操作
    • HTTP
    • Direnv
    • ssh-agent
    • 高级表格工作流
    • Polars vs Pandas vs Nushell
    • jq vs Nushell

高级表格工作流

合并不同大小的表格

在 使用表格 中显示的示例在我们的表格具有相等数量的行时工作得很好,但如果我们想合并不同大小的表格呢?

let first_table = [[a b]; [1 2] [3 4]]
let second_table = [[c d]; [5 6]]
$first_table | merge $second_table
# => ───┬───┬───┬───┬───
# =>  # │ a │ b │ c │ d
# => ───┼───┼───┼───┼───
# =>  0 │ 1 │ 2 │ 5 │ 6
# => ───┼───┼───┼───┼───
# =>  1 │ 3 │ 4 │ ❎│ ❎
# => ───┴───┴───┴───┴───

第二行中的列 c 和 d 是空的,因为我们的 second 表只包含单行;Nushell 没有东西可以填充剩余的行。但如果我们希望较小的表格 "环绕" 并继续填充行呢?为此,我们可以使用 chunks 命令将较大的表格分割成子表格,将每个子表格与较小的表格合并,然后使用 flatten 命令将合并的表格组合在一起。

例如:

let first_table = [[a b]; [1 2] [3 4]]
let second_table = [[c d]; [5 6]]

$first_table
| chunks ($second_table | length)
| each { merge $second_table }
| flatten
# => ───┬───┬───┬───┬───
# =>  # │ a │ b │ c │ d
# => ───┼───┼───┼───┼───
# =>  0 │ 1 │ 2 │ 5 │ 6
# => ───┼───┼───┼───┼───
# =>  1 │ 3 │ 4 │ 5 │ 6
# => ───┴───┴───┴───┴───

我们可以用两个以上的表格来做这个吗?当然可以!让我们添加第三个表格:

let third_table = [[e f]; [7 8]]

我们可以像这样合并所有三个表格:

$first_table
| chunks ($second_table | length)
| each { merge $second_table }
| flatten
| chunks ($third_table | length)
| each { merge $third_table }
| flatten
# => ───┬───┬───┬───┬───┬───┬───
# =>  # │ a │ b │ c │ d │ e │ f
# => ───┼───┼───┼───┼───┼───┼───
# =>  0 │ 1 │ 2 │ 5 │ 6 │ 7 │ 8
# => ───┼───┼───┼───┼───┼───┼───
# =>  1 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8
# => ───┴───┴───┴───┴───┴───┴───

或者如 Nushell 之书 中提到的,我们可以使用 reduce 命令递归地合并表格:

[$first_table $second_table $third_table]
| reduce { |elt, acc|
    $acc
    | chunks ($elt | length)
    | each { merge $elt }
    | flatten
  }
# => ───┬───┬───┬───┬───┬───┬───
# =>  # │ a │ b │ c │ d │ e │ f
# => ───┼───┼───┼───┼───┼───┼───
# =>  0 │ 1 │ 2 │ 5 │ 6 │ 7 │ 8
# => ───┼───┼───┼───┼───┼───┼───
# =>  1 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8
# => ───┴───┴───┴───┴───┴───┴───
在GitHub上编辑此页面
Contributors: Yethal, Hofer-Julian, Justin Ma, lavafroth, arnau, jaudiger, Ian Manske, NotTheDr01ds, Bruce Weirdan, Jan Klass, voyage200🍬
Prev
ssh-agent
Next
Polars vs Pandas vs Nushell