Quantcast
Viewing all articles
Browse latest Browse all 2722

bash > fileIO > 並列化 > ls + awk > 入力ファイルをINTVLとINDX指定で分割する > コマンド | bashスクリプト v0.1, v0.2 | brace expansionによる失敗

動作環境
CentOS Linux release 7.7.1908 (Core)

状況

  • OpenMPで処理が遅いので、自分が考える最適な並列化に変更する
  • そのためにはlsで読込むファイルリストを分割する方法が必要となる

分割対象ファイル

$ ls DATA/
inp.001  inp.002  inp.003  inp.004  inp.005  inp.006  inp.007  inp.008  inp.009  inp.010  inp.011  inp.012

環境変数とawkを使った分割例

$ INTVL=3 && INDX=1 && ls DATA/inp.0* | awk '(NR % '$INTVL' == '$INDX'){print $1}'
DATA/inp.001
DATA/inp.004
DATA/inp.007
DATA/inp.010

環境変数にするとパイプで渡す必要がなくなる。

bashスクリプト v0.1

loop_interval_191023_exec

loop_interval_191023_exec
#!/usr/bin/env bash

function myls ()
{
    INTVL=$1 && INDX=$2 && ls DATA/inp.0* | awk '(NR % '$INTVL' == '$INDX'){print $1}'
}

if [ $# -lt 2 ];then
    echo "[cmd] [interval] [start]"
    echo "e.g."
    echo "[cmd] 4 1"
    exit
fi

INTERVAL=$1
START=$2

for elem in $(myls $INTERVAL $START);
do
    echo $elem
done

実行例 > パラメータ不足

$ bash loop_interval_191023_exec 
[cmd] [interval] [start]
e.g.
[cmd] 4 1

実行例 > パラメータ指定

$ bash loop_interval_191023_exec  4 1
DATA/inp.001
DATA/inp.005
DATA/inp.009

bashスクリプト v0.2

対象ファイルを指定できるように変更

loop_interval_191023_exec
#!/usr/bin/env bash

function myls_skipped ()
{
    INTVL=$1 && INDX=$2 && ls $3* | awk '(NR % '$INTVL' == '$INDX'){print $1}'
}

if [ $# -lt 3 ];then
    echo "[cmd] [interval] [start] [Dir/prefix]"
    echo "e.g."
    echo "[cmd] 4 1 DATA/inp.0"
    exit
fi

INTERVAL=$1
START=$2
TARGET_DIR_WITH_PREFIX=$3

for elem in $(myls_skipped $INTERVAL $START $TARGET_DIR_WITH_PREFIX);
do
    echo $elem
done

実行例 > パラメータ不足

$ bash loop_interval_191023_exec 
[cmd] [interval] [start] [Dir/prefix]
e.g.
[cmd] 4 1 DATA/inp.0

実行例 > パラメータ指定

$ bash loop_interval_191023_exec  4 1 DATA/inp.0
DATA/inp.001
DATA/inp.005
DATA/inp.009

備考

$ bash loop_interval_191023_exec  4 1 DATA/inp.0*

のように使うとBrace Expansionにて展開された引数を関数mylsが受けることになり失敗する。

そのために上記のようにした。

関連

下記は上記の実装の先で使った情報。


Viewing all articles
Browse latest Browse all 2722

Trending Articles