![アプリケーション並列処理を使用せずにデータファイルをバッチ処理するにはどうすればよいですか? [コピー]](https://linux33.com/image/129071/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%9B%E3%81%9A%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%83%90%E3%83%83%E3%83%81%E5%87%A6%E7%90%86%E3%81%99%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F%20%5B%E3%82%B3%E3%83%94%E3%83%BC%5D.png)
分析プログラムとデータを含むテキストファイルがあります。説明の便宜のためにそれぞれとwibble
を呼び出しますdata.txt
。
for
すべてのデータを処理するために単純なループを試しました。
私は$(cat data.txt)で行います。 スイング$i 完璧
しかし、一つずつ分析するには長い時間がかかります。
そこで、各データに対して別々の作業を分割してみました。
私は$(cat data.txt)で行います。 (スイング$ i)& 完璧
しかし、あまりにも多くの分析プロセスを実行すると、メモリ破損が発生する可能性があります!
だから私は5人ずつグループ別に分析過程を始めたかったのです。最初の5つのデータ項目を選択し、そのデータ項目の分析プロセスを開始してから、次の5つの項目を選択して同じ操作を実行します。
前の記事(下記)で説明した手続き型「並列性」を使用せずにこれを行うにはどうすればよいですか?機関ワークステーションにこのアプリケーションをインストールするためのsudo権限がないため、これを達成するためにより簡単なコードを使用しようとしています。
https://unix.stackexchange.com/questions/299346/running-commands-at-once
https://unix.stackexchange.com/questions/361505/how-to-control-for-loop
答え1
GNUの使用xargs
:
xargs -rn 1 -P 5 -a file wibble
これはarrallで最大5つのコマンドを実行しwibble
、各コマンドはas引数から1ワードを取得します。P
file
GNU の場合、xargs
単語は一連の空白、タブ、または改行文字で区切られ、一重引用符、二重引用符、およびバックスラッシュはこれらの区切り文字および互いの引用演算子として認識されます。
~のため性格ファイルの各行に1つずつ追加します-d '\n'
。
~のため性格bash
デフォルトでは、(変更されない限り)スペース、タブ、および改行で区切られ、ファイル名の生成の影響を受けるonのメソッドのように処理するには、次のようにします$IFS
。
xargs -rn 1 -P 5 -0a <(printf '%s\0' $(<file)) wibble
つまり、シェルに分割+globを実行し、printf
結果の単語をに渡すようにしますxargs
。