A 1.1 funcA1() B 1.2 funcB1() C 1.3 funcC1() A 2.4 funcA2() B 2.5 funcB2() C 2.6 funcC2()
![[Linux][awk] awkでログ集計(合計, 平均) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/f17a7939d093b328b799db6cf1439df0c621f428/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9JTVCTGludXglNUQlNUJhd2slNUQlMjBhd2slRTMlODElQTclRTMlODMlQUQlRTMlODIlQjAlRTklOUIlODYlRTglQTglODglMjglRTUlOTAlODglRTglQTglODglMkMlMjAlRTUlQjklQjMlRTUlOUQlODclMjkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPWJhNDZlOWFmOWUwNGE4MzIxN2E3MjhlY2Q0N2Q2N2Y4%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBrb2FyYS1sb2NhbCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnM9ZTk3NjkxMjcwNTQxZDY0ZTg5MGQzMWYxNzdhMmRjMmI%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g44Oq44OD44Kv44K944OV44OI5qCq5byP5Lya56S-%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%2523212121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3D3a0358da07b807ade79a9029dce87c3e)
最近はシェル芸を駆使したリファクタリングにはまっている。 簡単なリファクタリングならIDEでもできるのだけど、それだと固有のIDEとか言語に依存してしまうし込み入ったことは対応できない。 シェル芸によるコード編集を身に着けておけば対象となる言語や時代を超えて使えるので、自己投資としては悪くないと思う。 例 下記のようなコードを一括で削除したいと思った。 こういうとき、エディタで手作業でやりがちなのだけど、手作業したら負けかなと思ってgrep, awk, sedを駆使してやってみた。 (ちなみにここでsedと言ってるのはGNU Sedのことです。) やりかた git grep -i -n 'foo === null' | awk -F: '{print "sed -i -e " $2 "," $2+3 "d " $1}' | bash 解説 grep -n でマッチした行数を表示させる $
テキストベースのファイル形式と、それぞれを(主にLinux上で)操作するためのコマンドラインツールのリストを掲載しています。 目次 DSV XML,HTML JSON YAML,TOML INI 設定ファイル おまけ:単一ファイルデータベース用コマンドラインインタフェース(CLI) ライセンス 情報開示 DSV CSV や TSV などを含む DSV(Delimiter-separated values、区切り文字で区切られた値) です。 Awk AwkはPOSIXで標準化されているコマンドラインツールで、DSVデータ処理用プログラミング言語です。Awkに関するリンクは以下のとおりです。 Awk.info — Awkに関する情報が豊富です。 AWK Vs NAWK Vs GAWK —プラットフォーム別実装の比較です。 すでにプログラミング言語を使用してプログラミングをしている場合は、naw
egzactというコマンドの詰め合わせセットを作ってみました。 → Github きっかけ zipで多重圧縮するのに、$ zip ファイル | zip | tee zip1 | zip | tee zip2 | zip | tee zip3 。。みたいなの出来ない? #シェル芸 #usptomo — ぱぴろん (@papiron) 2016年3月25日 これはあるシェル芸界隈1の方の発言です。アンチウイルスソフトの動作確認で、多重ZIPされたテストウイルスファイルが必要だったとのことです。何人かの方からアドバイスを頂いていたようですが、残念ながらシェルでサクッっとは結局できなかったご様子でした2。 この事例は、シェル上でのワンライナー(a.k.a シェル芸3)の弱点の一つを如実に表しています。文字列を切り出したり、変換したりというフィルタリングの処理は得意ですが、パターン生成が比較的苦手で
ログ集計など、コマンドラインで作業するとき、awk でさらっとワンライナーが書けると捗ることがあります。 本記事で、ユースケースに応じた awk のコマンド実行例を記していきます。主にサーバ運用に従事する方向けの内容になるでしょう。 私自身のユースケースに当てはまらないものは書かないこともありそうです。 何かお気づきの点があればお知らせ下さい。 入門編 指定したフィールドを抽出
topの概要 語り尽くされてますし、manにもすごく丁寧に説明がありますので、見た目だけ。 top - 10:12:59 up 42 min, 3 users, load average: 0.00, 0.01, 0.05 Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie Cpu(s): 0.6%us, 0.4%sy, 0.0%ni, 96.8%id, 2.1%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 4048536k total, 1446716k used, 2601820k free, 36404k buffers Swap: 4194300k total, 0k used, 4194300k free, 1124068k cached PID USER PR NI VIRT RES S
linuxのコマンドラインでデータ加工をする際によく使うAWKですが、個人的につまずいた使い方について、 覚え書きとして残します。誰かの助けになれば… 組み込み関数覚え書き FS 入力フィールドセパレータ(空白とタブ) CNVFMT 数値を文字列に変換するフォーマット OFMT 数字の出力フォーマット(%.6g) OFS 出力フィールドセパレータ(空白) ORS 出力レコードセパレータ(\n) RS 入力レコードセパレータ(\n) SUBSEP 配列添字セパレータ(\034) ARGC コマンド行の引数の数+1 ARGV コマンド行の引数の配列 ENVIRON["..."] 環境変数の値 FILENAME 入力ファイル名 FNR 入力ファイルの通算レコード NF 入力レコードのフィールド数 NR 入力レコード総数 RLENGTH matchで適合した文字列の長さ RSTART matchで
ちょっとしたスクリプトを作っていた際、文字列の抜き出しを多様する処理があったので忘れないように残しておく。 2017/01/14 追記 個人的な好みで、変数へ代入をしてこなかった(スクリプト書かずにシェル芸で対応することのほうが多いため)のだが、スクリプトで書くなら変数に代入してからパラメータ展開によって文字列を抜き出す方法もあるので、念のため追記しておく。 左から◯文字 cut -c [開始文字(個数)]-[終了文字(個数)] [root@test-node ~]# # 例:左から1文字目~4文字目 [root@test-node ~]# echo abcdefghijk | cut -c 1-4 abcd [root@test-node ~]# [root@test-node ~]# # 例:左から2文字目~5文字目 [root@test-node ~]# echo abcdefghi
awkという、古くからのスクリプト言語がある。(1977年生まれ。読み方は「オーク」である。エイ・ダブリュ・ケイではない)man awkをPDFに変換してみると、たったの3ページ強しかない。 $ man -t awk|pstopdf -i -o ~/Downloads/awk.pdf とてもシンプルな言語仕様ではあるが、awkには必要十分な表現力がある。特にテキストを処理する場面においては、最小限のシンプルな記述で、気の利いた処理を素早くこなす。無駄のないawkワンライナーを見ると、ある種の感動を覚える。awk以降に生まれたスクリプト言語は、少なからずawkの影響を受けていると思われる。 awkを知ることで、間違いなく幸福度は上がると思う。いつかきっと「知ってて良かった」と思える時が来るはず。もっともっと、awkを知りたくなってきた。 基本動作 awkの基本動作は、とってもシンプルである。
awk便利ですね。便利すぎてなんでもawk使おうとするんですが、範囲を広げるともどかしいことも増えてきます。 今回は、標準入力とは別に「IDとか名前とかキーワードとかの一覧が並んでいるテキストファイル」を読み込んで、どの行かと標準入力の1番目がマッチしたらその行を返すというスクリプトをご紹介します。 ロジックが簡単なので1度理解してしまえば、コピペでスクリプト貼り付けて一分で抽出始められます! awkのバージョンによっては動かないかもしれません。試したのは、WindowsのCygwin 64bit版のGNU Awk 4.1.0です。 #!/bin/awk -f # cat input.txt | awk -F, -v file=keyword.txt -f sample1.awk # 改行はLF # 日本語の場合文字コードはUTF8 BEGIN { DATA="|"; CAT = "cat
AWK(オーク)を使ったワンライナーはとても強力で簡便なテキスト処理を可能とします.最近は,Perl や Ruby でもほとんど同様のことができ,取って代わられて久しいですが未だにその枯れ力といいますか,汎用性に関しては群を抜いているように思います. また,awk とは AWK の処理系のことを指しています. 一般に元祖 awk と呼ばれる処理系が最初と言われています.実際はわかりませんが,絶滅種の如く見かけることはなく,その文法などに関しても関数定義などの基本的な部分が抜けていたので New awk(通称,nawk)として多少の文法が追加された処理系が,その流派を継いでいます. そして GNU プロジェクトによって大幅強化された awk が gawk です. よく見かけるのは,gawk か nawk のどっちかだと思います. 現在,Linux では標準で gawk が,OS X では 2
大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablog を書きましたが、awk file > file より cat file|awk > file が速い環境は稀なようなので、私の環境でなぜ cat file|awk > file のほうが速いのか調べてみました。プロセススケジューラが関係しているようです。 ↑はPerf + Flame Graphs で、awk file > file 実行時のコールスタックと所要時間を可視化したものです。 結論(たぶん) SSDの暗号化・復号をカーネルスレッドで行なっているのと、プロセススケジューラが awk とカーネルスレッドを同じ CPU にスケジューリングしていた(他に空いている CPU があるのに)。 awk file > file では暗号化データを復号するカーネルスレッドと awk のプロセスをプロセススケ
以下、長々と書いてますが、結論は ”私の環境で”大きなテキストファイルをawkで処理するときにcatで投げ込むと速い理由 - ablogに書いてます はじめに awk file より cat file|awk のほうが速いという以下のブログエントリが興味深いので調べてみました。 ちなみに cat file|awk が速くなる環境は稀で、巷では awk file のほうが速い環境のほうが多いようで、どちらが速いかは環境依存です。 [root@localhost sample]# cat command1 awk '$5 ~ /((26|27|28|29|30)\/Jun|(01|02|03)\/Jul)/{ print }' sample.txt > result1.txt (中略) [root@localhost sample]# time sh command1 real 0m53.92
追記が増えたので整理 経緯 2.5GBのテキストファイルを加工する必要があり、①vimで開いて加工→vim死亡②sublime textで開いて加工→sublime text死亡となったため、awkを用いて以下の様なコマンドを実行した。 $ cat sample.txt | awk '$5 ~ /((26|27|28|29|30)\/Jun|(01|02|03)\/Jul)/{ print }' > result.txt すると 「catいらなくね?」と指摘 さらにMATSUMOTO, Ryosuke (@matsumotory) | Twitter < 「キャッシュに入れて高速化してるんかと思った」 とコメントをもらいました。ので、どっちが速いかの検証です。 注意 加工の目的はログファイルからある期間だけの行を抜き取りたい 正規表現がいけてないのは気にしない 比較 awkにファイル指定す
Linuxで特定の設定ファイルから設定値のみを取得するには、awkかsedをgrepと組み合わせると良いだろう。 たとえば、ダブルクォーテーション(")やシングルクォーテーション(')で囲まれた設定値のみを取得したい場合は、以下のようにコマンドを実行する。 ダブルクォーテーションで囲まれている場合 grep 設定項目名 設定ファイル | sed 's/[^"]*"\([^"]*\)"[^"]*/\1/g' シングルクォーテーションで囲まれている場合 grep 設定項目名 設定ファイル | sed "s/[^']*'\([^']*\)'[^']*/\1/g" イコールやスペースで区切られている場合は、awkとgrepを組み合わせればいい。 空白で区切られている場合 grep 検索する設定項目 設定ファイルPATH | awk -F' ' '{ print $2}' イコールで定義している場合
Hey i want to count the amount of data in a certain column in awk. an example dataset is 2 5 8 1 3 7 8 5 9 and I want to count the frequency of the 5 in the second colum. This is what i tried that didn't work { total = 0; for(i=1;i<=NF;i++) { if(i==2) {if($i==5) {total++;} } printf("%s ", total); } }
やっていること watch -d -n 1 "COMMAND" COMMAND を1秒毎に実行し、実行結果に変化があった場合は該当箇所をハイライト表示します。 -n … 指定した秒数ごとに COMMAND を実行します。 -d … 実行結果の差分をハイライト表示します。 netstat -alpn すべてのネットワーク状態をポート付き&名前解決なしで表示します。 grep -E ':(80|443)' 80番と443番ポートの表示を抽出します。 awk {'print $5'} 5番目の列を表示します。 netstat -alpn の場合は、左端を1番めとして順に Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name となるので、 Foreign Address (アクセス元)を表示しようとしていま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く