HiiHahWIKI - making some notes for... -
awkについて
をテンプレートにして作成
開始行:
***awk [#y1919cd4]
awkはawkで何ページも書けちゃう内容なんだろうけど、とりあ...
こんなテキストファイルがあります。このテキストファイルの...
まあ、アドレス帳だと思ってください。
firstName lastName address phoneNo
Shogo Miyazaki Tokyo 090-xxxx-yyyy
Tatsuya Akasaka Osaka 080-aaaa-bbbb
Mayuko Kobayashi Osaka 080-aaaa-bbbb
Hana Takahashi Nagoya 070-cccc-dddd
Tarou Omori Nagoya 070-cccc-dddd
・・・・
このアドレスの、苗字だけほしい場合、こんな感じにawkです。
[root@server tmp]# awk '{print $2}' Address.txt
lastName
Miyazaki
Akasaka
Kobayashi
Takahashi
Omori
へー、2列目だけ取れた。
じゃあ、このアドレス帳のなかで、Address(住所)が「Osaka...
[root@server tmp]# awk '$3=="Osaka" {print $2}' Address....
Akasaka
Kobayashi
へー、大阪の人だけ取れた。
ちなみに、|をつかってつなげることも出来ます。つなげるイ...
[root@server tmp]# cat Address.txt | awk '$3=="Osaka" {p...
Akasaka
Kobayashi
ちなみに、こうやっても同じ
[root@server tmp]# cat Address.txt | grep Osaka | awk '{...
Akasaka
Kobayashi
最初の一人だけほしい場合
[root@server tmp]# cat Address.txt | grep Osaka | head -...
Akasaka
ずいぶん色々出てきた。
awkは正規表現とかも使えるみたいだけど、今日はもうつかれた...
***最後の要素だけ取り出したい。 [#k5047698]
頭から順番に値を取り出す方法はわかった。しかし、最後の要...
それはこんな感じです。
awk '{print $NF}' test.log
これで、test.logの行の最後の要素だけ取れます。
-[[awk の使い方:http://www.iplab.is.tsukuba.ac.jp/script/...
***後ろからn番目の要素を出力する [#ae2a4eea]
こんな感じです。
awk '/rows=[^0]/ {print $NF, $(NF-1)}' test.log
こんな感じで
-rows=「0」でない行の場合
-最後の要素と後ろから2番目の要素をprint
できます。
ちなみに、manではこんな感じの解説があります。
>The variable NF is set to the total number of fiel...
まあ、「NFは要素の合計数が入ります」ってかいてあるので、...
***区切り文字にタブを指定する [#q8da5f27]
awk -F"\t" ~
***指定行のみ出力 [#m3618450]
こんな感じです。
awk 'NR >= 100000 && NR < 101000 {print $0}' ファイル名
10万行~10万1000行目までを抽出し、出力します。
***jmeterのXML形式で出力された結果からレスポンスタイムだ...
元のデータ形式は以下の通り(複数繰り返す)
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<httpSample t="368" lt="367" ts="1318934276264" s="true"...
<assertionResult>
<name>アサーション</name>
<failure>false</failure>
<error>false</error>
</assertionResult>
</httpSample>
<httpSample t="101" lt="99" ts="1318934276664" s="true" ...
<assertionResult>
<name>アサーション</name>
<failure>false</failure>
<error>false</error>
</assertionResult>
</httpSample>
・・・
「t="XXX"」がレスポンスタイム。
以下でここだけ抽出。
awk '/^<http/ { print $2}' jmeter_out.log | sed -e 's/t=...
***パターンマッチした行に含まれる数値を集計 [#acb5aecf]
「Query_time」っていうキーワードが含まれる行の3カラム目を...
awk '/Query_time/ { total += $3 } END { print total }' t...
***あるカラムの数値が一定数よりも小さい場合 [#xb6a0941]
ls -l の結果、ファイルサイズが1000byteよりも少ないファイ...
ls -l | awk ' $5 < 1000 { print $5,$10 }'
***8カラム目がADM*の行の3カラムを出力する [#z6b041a0]
ちなみに、元のファイルはgeonamesってところから日本のデー...
awk '$8 ~ /ADM.*/ {print $3}' JP.txt > cityname.txt
***先頭に現在日時を追加する。 [#p0b35123]
こんな感じでできます。
echo aaaa | awk '{ ct = strftime("%Y%m%d%H%M%S");print c...
***ls -lの出力のファイルサイズを合計する。 [#h649c06a]
こんな感じです。
ls -l | awk '/^-r.*/ { size+=$5 } END { print size }'
終了行:
***awk [#y1919cd4]
awkはawkで何ページも書けちゃう内容なんだろうけど、とりあ...
こんなテキストファイルがあります。このテキストファイルの...
まあ、アドレス帳だと思ってください。
firstName lastName address phoneNo
Shogo Miyazaki Tokyo 090-xxxx-yyyy
Tatsuya Akasaka Osaka 080-aaaa-bbbb
Mayuko Kobayashi Osaka 080-aaaa-bbbb
Hana Takahashi Nagoya 070-cccc-dddd
Tarou Omori Nagoya 070-cccc-dddd
・・・・
このアドレスの、苗字だけほしい場合、こんな感じにawkです。
[root@server tmp]# awk '{print $2}' Address.txt
lastName
Miyazaki
Akasaka
Kobayashi
Takahashi
Omori
へー、2列目だけ取れた。
じゃあ、このアドレス帳のなかで、Address(住所)が「Osaka...
[root@server tmp]# awk '$3=="Osaka" {print $2}' Address....
Akasaka
Kobayashi
へー、大阪の人だけ取れた。
ちなみに、|をつかってつなげることも出来ます。つなげるイ...
[root@server tmp]# cat Address.txt | awk '$3=="Osaka" {p...
Akasaka
Kobayashi
ちなみに、こうやっても同じ
[root@server tmp]# cat Address.txt | grep Osaka | awk '{...
Akasaka
Kobayashi
最初の一人だけほしい場合
[root@server tmp]# cat Address.txt | grep Osaka | head -...
Akasaka
ずいぶん色々出てきた。
awkは正規表現とかも使えるみたいだけど、今日はもうつかれた...
***最後の要素だけ取り出したい。 [#k5047698]
頭から順番に値を取り出す方法はわかった。しかし、最後の要...
それはこんな感じです。
awk '{print $NF}' test.log
これで、test.logの行の最後の要素だけ取れます。
-[[awk の使い方:http://www.iplab.is.tsukuba.ac.jp/script/...
***後ろからn番目の要素を出力する [#ae2a4eea]
こんな感じです。
awk '/rows=[^0]/ {print $NF, $(NF-1)}' test.log
こんな感じで
-rows=「0」でない行の場合
-最後の要素と後ろから2番目の要素をprint
できます。
ちなみに、manではこんな感じの解説があります。
>The variable NF is set to the total number of fiel...
まあ、「NFは要素の合計数が入ります」ってかいてあるので、...
***区切り文字にタブを指定する [#q8da5f27]
awk -F"\t" ~
***指定行のみ出力 [#m3618450]
こんな感じです。
awk 'NR >= 100000 && NR < 101000 {print $0}' ファイル名
10万行~10万1000行目までを抽出し、出力します。
***jmeterのXML形式で出力された結果からレスポンスタイムだ...
元のデータ形式は以下の通り(複数繰り返す)
<?xml version="1.0" encoding="UTF-8"?>
<testResults version="1.2">
<httpSample t="368" lt="367" ts="1318934276264" s="true"...
<assertionResult>
<name>アサーション</name>
<failure>false</failure>
<error>false</error>
</assertionResult>
</httpSample>
<httpSample t="101" lt="99" ts="1318934276664" s="true" ...
<assertionResult>
<name>アサーション</name>
<failure>false</failure>
<error>false</error>
</assertionResult>
</httpSample>
・・・
「t="XXX"」がレスポンスタイム。
以下でここだけ抽出。
awk '/^<http/ { print $2}' jmeter_out.log | sed -e 's/t=...
***パターンマッチした行に含まれる数値を集計 [#acb5aecf]
「Query_time」っていうキーワードが含まれる行の3カラム目を...
awk '/Query_time/ { total += $3 } END { print total }' t...
***あるカラムの数値が一定数よりも小さい場合 [#xb6a0941]
ls -l の結果、ファイルサイズが1000byteよりも少ないファイ...
ls -l | awk ' $5 < 1000 { print $5,$10 }'
***8カラム目がADM*の行の3カラムを出力する [#z6b041a0]
ちなみに、元のファイルはgeonamesってところから日本のデー...
awk '$8 ~ /ADM.*/ {print $3}' JP.txt > cityname.txt
***先頭に現在日時を追加する。 [#p0b35123]
こんな感じでできます。
echo aaaa | awk '{ ct = strftime("%Y%m%d%H%M%S");print c...
***ls -lの出力のファイルサイズを合計する。 [#h649c06a]
こんな感じです。
ls -l | awk '/^-r.*/ { size+=$5 } END { print size }'
ページ名: