为什么大括号扩展与通配符结合的行为不同paste
?
示例:假设我们有多个文件夹,每个文件夹都包含相同结构的 tsv,并且想要创建一个包含每个文件夹的第 5 行的“all.tsv”。这两个命令的行为不同:
paste -d, <(cut -d$'\t' -f5 {test,test1,test2}/example.tsv) > all.tsv
对比
paste -d, <(cut -d$'\t' -f5 test*/example.tsv) > all.tsv
第一个按预期创建一个具有 3 列的 tsv,第二个创建一个单列 tsv,其值位于彼此下方。
我的问题是文件夹列表任意大,可能很长而且不连续。
有没有一种方法可以实现与使用通配符进行大括号扩展相同的行为,而无需移动到 bash 脚本并迭代文件夹?
使用 GNU bash
您正在寻找的行为是在 bash-3.2(macOS 上找到的版本)和 bash-4.0 之间修复的错误。从更改文件:
对于单行,您可以尝试 awk:
解释: