同じ名前の複数のファイルを含むディレクトリがあり、それぞれに対応するa04x.txt
ファイルがb04y.txt
あります。各ファイルペアに対していくつかのコマンドを実行し、c04z.txt
各ペアに対して追加のファイルを生成できる必要があります。
ファイル内の実際の数字はかなり大きく、リーンなので、1から99までのすべての数字または同様の数字を単純に繰り返すことは機能しません。
現在、私はタスクを処理するために次のアプローチを使用していますが、これを行うにはより短くより良い方法が必要なほど一般的なタスクのようです。
for num in ./a*x.txt
do
num="${num##*/a}"
num="${num%x.txt}"
my_command a${num}x.txt b${num}y.txt c${num}z.txt
done
a${num}x.txt
理想的には、b${num}y.txt
同じ番号の一致するファイルがある場合やファイルがない場合に警告を受けたいと思います。また、ファイルセットをパイプで接続しxargs
たり、parallel
同時に複数のファイルセットを処理したりする簡単な方法が必要です。
もっと良い方法がありますか?
ベストアンサー1
GNU Parallelにはこれを行う方法があり、ボーナスでコマンドを並列に実行します。
$ parallel my_command {} \
{= s/a([0-9]+)x.txt/b\1y.txt/ =} \
{= s/a([0-9]+)x.txt/c\1z.txt/ =} \
::: a*x.txt
これらの代替品はPerlコードです。改行は単に可読性のためのものです。一度に1行ずつ表示されます。