アウトプットができる技術者に

it's a time to take a new step !

awk

awk 配列

awk

配列に値を格納 arr[0] = 123 arr[1] = 456要素数はlengthで出せる print "N=" length(arr)多次元配列っぽくはできるけど、多次元配列にはできない arr[key1,key2] = valfor文で舐めることができる splitはよく使う。第3引数の区切り文字は省略するとFSが使…

awk 変数のスコープを局所変数にする小技

awk

awkの変数は基本的にGlobal変数だが、関数の引数にすることで局所化できる #!/bin/awk function hello(name, pre){ pre = "Mr." name = name "-san" print "hello " pre name # => hello Mr.Sato-san } { pre = "Miss " name = "Sato" hello(name) print pre…

awk 変数のスコープ

awk

基本的に変数はGlobal変数 ただし、関数の引数にするとLocal変数になる 配列はLocal変数にはならない。参照渡しになるため? #!/bin/awk function hello(name){ pre = "Mr. " name = name "-san" print "hello " pre name # => "helo Mr. Sato-san" } { pre …

awk 複数ファイル 結合

awk

echo "1,apple 2,orange" > tmp/in1.csv echo "1,100 2,200" > tmp/in2.csv awk -f awk/join.awk tmp/in1.csv tmp/in2.csvBEGIN{ FS="," OFS="," i=0 } FILENAME == ARGV[1] { id=$1 label[id]=$2 ids[i]=id i++ } FILENAME == ARGV[2] { id=$1 price[id]=$2…

awk 複数ファイル 入力

awk

単純に複数ファイルを引数に渡せばよい ファイルの入力順に読み込まれる echo "001,apple 002,pie" > tmp/in1.csv echo "001,orange 002,juice" > tmp/in2.csv awk -f awk/multi.awk tmp/in1.csv tmp/in2.csvBEGIN{ FS="," OFS="," } { print FILENAME, NR, …

awk 複数ファイル 出力

こんな感じで書ける { print ($1,$2) >> "tmp/out1.txt" print ($3,$4) >> "tmp/out2.txt" } awk 目次 - How might I ...

awk 月の足し算

awk

#!/bin/awk function addmonth(yyyymm, n){ yyyy = substr(yyyymm,1,4) mm = substr(yyyymm,5,2) + n time = mktime(yyyy" "mm" 1 0 0 0") return strftime("%Y%m", time) } { print addmonth(201301, 1) == 201302 ? "." : "NG"; print addmonth(201312, 1)…

シングルクオートを出力

awk

echo "abc" | awk '{ printf("\047%s\047", $1) }' # => 'abc' awk 目次 - How might I ...

awk 目次

awk

基本 配列 Tips 月末の計算 日付計算 月の計算 printfと四捨五入 シングルクオートを出力 複数ファイルの出力 複数ファイル入力 awk 複数ファイル 結合 awk 変数のスコープを局所変数にする小技 - How might I ...

月末の計算

awk

function eomth(yyyymm){ yyyy=substr(yyyymm,1,4) mm=substr(yyyymm,5,2) + 1 time = mktime(yyyy" "mm" 1 0 0 0") - 60 * 60 * 24 * 1 return strftime("%Y%m%d", time) } { # test print eomth("201301") == "20130131" ? "." : "NG" # end of month 31th…

awkで日付の計算

awk

日付の足し算/引き算ができる関数を作ってみた。 一応、閏年もチェック済み。 function add_day(yyyymmdd,i){ yyyy=substr(yyyymmdd,1,4) mm=substr(yyyymmdd,5,2) dd=substr(yyyymmdd,7,2) time = mktime(yyyy" "mm" "dd" 0 0 0") + 60 * 60 * 24 * i retur…

awkのprintfは切捨てでも四捨五入でもない?

awk

printfを利用することで小数点第N位での切捨てが簡単にできる...と思ったていたら、不思議な結果になりました。 「0.5」が四捨五入になりません。 でも「0.51」は四捨五入になるようです。 echo "0.124" | awk '{printf("%0.2f", $1)}' # => 0.12 echo "0.12…