bash - 使用自定义 shell 函数过滤 GNU 拆分
问题描述
有没有办法将 GNU split--filter
与自定义 shell 函数一起使用,例如
my_func () {
echo $1
}
split -d 10 INPUT_FILE chunk_ --filter="my_func $FILE$"
我希望输出
chunk_00
chunk_01
...
当然,自定义函数中的回声只是为了在这里表达我的问题,在我的具体情况下,自定义函数创建了一个脚本,该脚本使用 split 中的块作为输入。
似乎 GNU shell 只接受--filter
.
有什么聪明的方法吗?
解决方案
您可以通过将函数导出到环境来执行此操作,该环境可用于通过 split 运行的子 shell。例如使用 bash:
ex.sh
#!/bin/bash
my_func() {
echo $1
}
export -f my_func
seq inf | split -d --filter='my_func $FILE' /dev/stdin chunk_
如果你像这样运行它:
bash ex.sh | head
输出是:
chunk_00
chunk_01
chunk_02
chunk_03
chunk_04
chunk_05
chunk_06
chunk_07
chunk_08
chunk_09
有关UL的此答案的更多详细信息。
请注意,split
使用任何SHELL
设置的变量作为子 shell 来运行--filter
命令。如果您正在运行不同的 shell,您可能需要export SHELL=/bin/bash
在运行前添加split
.
推荐阅读
- r - 你如何将组分配给更大的组 dpylr
- java - 错误:java.lang.NoSuchMethodError:com.google.common.base.Stopwatch.elapsedMillis()J 在火花中读取文件时?
- scala - 使用 sbt-native-packager 通过 JavaServerAppPackaging 检测 prometheus 导出器
- arrays - Python 打开文件,解析成数组,然后在较大的字符串中搜索子字符串。未找到用户输入,但找到硬编码字符串
- python - 对特定请求使用 request_started 信号
- c# - Microsoft Edge 中 Flash 的注册表项
- gitlab - Gitlab AutoDevOps Angular
- c# - 为什么这段代码会给出“可能的空引用返回”编译器警告?
- swift - 如何在 Swift 中为 Double 类型编写自定义 JSON 解码器策略
- python - docker zabbix 设备中的 API 连接问题