mecobalamin’s diary

人間万事塞翁が馬

メモ: ヒアドキュメント

ストレージのベンチマークを測定するコマンドにfioがある
調べてみると実行時のオプションとか
結果の出力結果とか、とても情報が多い
出力結果をうまく処理してくれるラッパーを作ってくれてる人がいるのだが、
シェルスクリプトで見たことない書き方があった

fioでCrystalDiskMarkっぽい計測を行うコマンドを作った
fioでCrystalDiskMarkっぽい計測を行うコマンドを作った - ぶていのログでぶログ

fio-cdm/fio-cdm
fio-cdm/fio-cdm at master · buty4649/fio-cdm · GitHub

このあたり

# see. http://www.winkey.jp/article.php/20110310142828679
cat <<_EOL_ | fio - | fio2cdm
[global]
ioengine=libaio
iodepth=1
size=1g
direct=1
runtime=60
directory=${TARGET}
filename=.fio-diskmark

~中略~

[Rand-Write-4K-QD32]
iodepth=32
bs=4k
rw=randwrite
stonewall
_EOL_

ヒアドキュメントというらしい。
使い勝手が良さそうなのでリンクのメモ。

ヒアドキュメント - Wikipedia

ヒアドキュメント(別の呼び方としてヒア文字列、heredocなど)は、文字列リテラルを、シェルスクリプトプログラミング言語ソースコード中に埋め込むための1つの方法である。

Here document - Wikipedia

In computing, a here document (here-document, here-text, heredoc, hereis, here-string or here-script) is a file literal or input stream literal: it is a section of a source code file that is treated as if it were a separate file.

bashのヒアドキュメントを活用する - Qiita
知ると便利なヒアドキュメント - Qiita
シェルスクリプトでヒアドキュメントを使う様々な方法 (bash / zsh)|Everything you do is practice
bashのメモ ( < << <<< <() ) - なんかやる

17 May 2019追記
awkの組み込み関数もややこしい
機能はman awkで見れる

split(s, a [, r [, seps] ])

Split the string s into the array a and the separators array seps on the regular expression r, and return the number of fields. If r is omitted, FS is used instead. The arrays a and seps are cleared
first. seps[i] is the field separator matched by r between a[i] and a[i+1]. If r is a single space, then leading whitespace in s goes into the extra array element seps[0] and trailing whitespace
goes into the extra array element seps[n], where n is the return value of split(s, a, r, seps). Splitting behaves identically to field splitting, described above.


gensub(r, s, h [, t])

Search the target string t for matches of the regular expression r. If h is a string beginning with g or G, then replace all matches of r with s. Otherwise, h is a number indicating which match of r
to replace. If t is not supplied, use $0 instead. Within the replacement text s, the sequence \n, where n is a digit from 1 to 9, may be used to indicate just the text that matched the n'th parenthesized subexpression. The sequence \0 represents the entire matched text, as does the character &. Unlike sub() and gsub(), the modified string is returned as the result of the function, and the original target string is not changed.

追記ここまで