macos - 带有数字名称的 bash for 循环

标签 macos bash for-loop batch-processing cat

我目前正在从事一个数学项目,但在使用 bash 编程时遇到了一点困难。

目前我有一个包含 800 个文本文件的目录,我想做的是运行一个循环以 cat 前 80 个文件(_01 到 _80)到一个新文件中并保存在其他地方,然后是接下来的 80 个(_81 到 _160)个文件等。

目录中的所有文件如下所示:ath_01、ath_02、ath_03 等。

有人能帮忙吗?

到目前为止我有:

#!/bin/bash

for file in /dir/*

do
echo ${file}
done

这只是简单地列出了我的文件。我知道我需要以某种方式使用 cat file1 file2 > newfile.txt 但它混淆了我与 _01、_02 等的数字扩展。

如果我将文件名更改为使用下划线以外的名称,会有帮助吗?像 ath.01 等?

干杯,

最佳答案

因为你提前知道你有多少文件以及它们是如何编号的,“展开循环”可能更容易,可以这么说,使用复制粘贴和一些手工调整来编写使用大括号扩展的脚本。

#!/bin/bash

cat ath_{001..080} > file1.txt
cat ath_{081..160} > file2.txt
cat ath_{161..240} > file3.txt
cat ath_{241..320} > file4.txt
cat ath_{321..400} > file5.txt
cat ath_{401..480} > file6.txt
cat ath_{481..560} > file7.txt
cat ath_{561..640} > file8.txt
cat ath_{641..720} > file9.txt
cat ath_{721..800} > file10.txt

否则,使用嵌套的 for 循环和 seq 命令

N=800
B=80
for n in $( seq 1 $B $N ); do
    for i in $( seq $n $((n+B - 1)) ); do
       cat ath_$i
    done > file$((n/B + 1)).txt
done

外层循环将遍历 n 到 1、81、161 等。内层循环将遍历 i 1 到 80,然后是 81 到 160,等等。如果第 i 个文件到标准输出,则内部循环的主体只是将内容转储到标准输出,但循环的聚合输出存储在文件 1 中,然后是文件 2,等等。

关于macos - 带有数字名称的 bash for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15186985/

相关文章:

macos - 如何创建 Bash 别名?

有效地将每个字 rune 件的 4 个字符序列压缩为 2 位

python - 避免 FOR 循环将多个字符串 append 到列表

php - 在php中使用for循环时如何检查最后一个循环?

swift - 仅当系统唤醒时触发计时器 (macOS)

python - 运行 *requests* 时出错

c - OSX Mavericks 导致 "cannot specify -o when generating multiple output files"

macos - 在 Cocoa 应用程序中捕获 Capslock 按键

c# - 使用方法作为变量

linux - 来自 bash 进程的最后一次系统调用