0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-10-23
動作環境
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が受けることになり失敗する。

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

関連

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?