Netnews

BEGIN の中での getline

予想通りの Ed Morton の反応でした。 getline inside BEGIN Question BEGIN { upper = "PNBRQK" lower = "pnbrqk" getline < "lance1.tmp" cor = substr($0,77,1) } 要するに、"lance1.tmp" の部分を可変にしたいということです。 Answer ここ を読んで、顔…

入力ファイルごとに出力ファイルを切り替える

reading out blocks of data, cleaning up data /SERVER/ { close(f); f = ""; next } !f && !NF { next } !f { split($0, a, ".") f = a[2] ".vol" ext next } { print >f } というファイルを使って、 $ awk -v ext=22 -f syscfg6.awk file01とし、出力ファ…

これって学校の宿題でつか?

sepsplit - splitting into fields together with matched field separators どうも、sepsplit() という関数を作って欲しいのですが、どこかの学校の宿題丸投げのような記法に笑ってしまいました。(ひょっとしたら真面目な問題なのかもしれませんが) Questio…

gawk と awk の違い? なのか?

Difference beetwen awk and gawk? Question 以下のように処理すると gawk ではエラーにならないけれど、awk だとエラーになるというものです。 awk '/[0-9]+ [a-z0-9]+/{printf " \047%s\047)\n", $1 > "text.txt"}END{printf "END\n" > "test.txt"}' afile…

substr() の問題・・・じゃねぇよ

substr() の問題というわけでもなく、出題者がどうやって自己解決したかもかかれてないので、何とも言えない問題です。 Help with substr Question BEGIN { print "Ol a'!" } /ActFrom\[1\]/{ S1L = $0;# sub(/ActFrom\[1\]="/,"",S1L); sub(/";/,"",S1L); p…

ファイルの途中での FS の変更

Changing FS inter-record 非常にありがちな問題ですが、皆さんはどうやって処理していますか? 私は FS は 1 つにして、あとは split() で分割したりするケースが多いです。 Question #field1,field2,field3 #field1,field2,field3,field4 #field1,field2 @f…

先頭行のスキップ

New awk user needs help Question 先頭にヘッダを記述した不要なレコードがあり、これをパスして読み込みたいという内容です。 Answer この出題だと情報が不足するため、いくつかの方法が提示されています。 NR > number_of_header_lines { do_whatever_wit…

小数点位置の揃え

週末に Netnews がらみを集中させて書くのはどうなんだろうかと思いつつ、集中して書きます。(w Netnews は awk のコミュニティの中では最も活発に議論されているところでもありますが、英語でしか読めないのと、そもそも nntp が使えるプロバイダも減少して…

並べ替え

filtering for identical field labels ***record*** TAG1 A TAG2 B irrelevant------------------ TAG2 C TAG3 D TAG4 E # ***record*** TAG1 f TAG2 g TAG2 h irrelevant------------------ TAG3 i TAG4 j #というファイルがあり、これを以下のようにした…

ファイルのパース

File parsing 10 abc 20 abcc 30 abcd 40 xycz 42 wxy 5 abc 20 abcd 30 abccというファイルがあり、最初のステップで以下のようにします。 "abc" - 10 "abcc" - 20 "abcd" - 30 ...次のステップで "abc" 10 - 5 = "abc" 5 "abcc" 20 - 30 = "abcc" -10のよ…

数学問題

awk math results differ from other languages 計算結果が awk だけ異なると言うものです。 $ echo "111111111 * 111111111" | bc -l 12345678987654321 $ perl -le 'print 111111111 * 111111111' 12345678987654321 $ python -c "print 111111111 * 11111…

フォーマットの問題

formatting question... 2007-10 14,807 1,604 29,600 2007-09 15,173 521 35,853 2007-08 12,799 1,236 516 2007-07 5,780 416 37,135というファイルがあり、以下のように出力したいそうです。 2007-10 14,807 1,604 29,600 2007-09 15,173 521 35,853 2007…

csv のヘッダーをどう扱うか

Refer to field headings? awk に csv のフィールドの位置ではなく、ヘッダーで一致させることができるかというものです。 awk '( $4 ~ /ASPAC/) {do something;}' < input_file ではなく awk '( region_name ~ /ASPAC/) {do something;}' < input_file のよ…

変数のセットに awk を用いる

awk question set myvariable = `awk '{print $1}' cool`としても動作しないのは何故かというものですが・・・結果が読めないぞ・・・shell が bash 系というオチでいいのかな? myvariable=`awk '{print $1}' cool`で動作したようですが、質問者が「空気読め…

tac の代用

tac replacement 最後から先頭へ向かって処理したいので、tac の代用はないかということですが、sed で以下のようなものを使っているそうです。 sed -e '1!G;h;$!d'以下の Juergen Kahrs の回答はどうかと思いますけど・・・。 awk '{print NR, $0}' data_fi…

awk できちんとマッチしない

*really* shortest match in awk - possible? awk '/^----/,/^____/{next}{print}' というものが正常に動作していないというものです。具体的には、以下のようなファイルを使っています。 From - Sun Sep 18 12:55:25 2005 (...) Some text I want to keep S…

テキストにある文字列ブロックを挿入する

inserting beg/end lines by blocks of text 1 test1 1 test2 1 test3 2 test1 2 test2 2 test3 2 test4 3 test1 3 test2 3 test3というファイルを以下のようにしたいというものです。 1 beg 1 test1 1 test2 1 test3 1 end 2 beg 2 test1 2 test2 2 test3 2…

範囲内の使っていない数字を求める

optimization - search free value through a range MIN_VALUE=800 MAX_VALUE=810という数字の範囲で、以下のファイルから使っていない数字を求めるというものです。 #> cat all_values 100 200 800 801 803 900以下のようなコードを書いたので、最適化して…

マッチした特定の場所を抜き出す

How to gram awk's regexp submatches? 以下のような場合にマッチした数値だけを抜き出したいと言うものです。 $echo "test4325363test" | awk "/(.*)([0-9]+)(.*)/ {print NUMBER HERE!}"代表的なものに match() を使うのと gensub() を使うものがあります…

正規表現にマッチした部分だけを取り出す

How to gram awk's regexp submatches? $echo "test4325363test" | awk "/(.*)([0-9]+)(.*)/ {print NUMBER HERE!}"とした場合に数字だけを表示したいそうですが、awk で RSTART, RLENGTH をうまく使うのは慣れが必要かもしれません。 echo "test4325363test…

ファイルから特定の行の抽出

pulling out blocks of data from file 以下のような行単位ではないファイルからのデータの抽出です。 root@server01:/usr/local/bin/getinfo . . some info . . root@server01: *** root@server02:/usr/local/bin/getinfo . . some info . . *** root@serve…

特定のフィールドでのソート

awk and sorting file substr($0,4,6) でソートするようなイメージだそうですが、具体的には以下のようなものです。 James Botte 0001-0092-30-33 99.6625 Henry Byle 0001-0092-30-21 81.2211 Moray Noll 0001-0092-30-51 9552.11これを最後の項目でソート…

マッチした前の行の表示 (続き)

reading previous lines after reaching certain string これらにはいろんな書き方がありますけど、以下のようなものも投稿されています。 /string/{print a[NR%3] RS a[(NR+1)%3] RS a[(NR+2)%3]} {a[NR%3]=$0} /string/{ line_3=a[NR%3]; line_2=a[(NR+1)%…

awk の標準エラー出力を切り替える

awk & stdout 完全に awk の問題ではないのですが、awk が出す標準エラー出力を取得したいということです。 dan@ubuntu:~$ awk -W version mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan compiled limits: max NF 32767 sprintf buffer 1020 dan@u…

マッチした前の行の表示

reading previous lines after reaching certain string マッチした前の行 3 行を表示したいというものです。 awk ではファイルハンドルとかでジャンプすることはできませんから、最初から配列に押し込めながら処理する手法が一般的で、そうした解法が示され…

C から入った人の疑問 (なのかな?)

a syntax error I cannot see. 以下のような awk スクリプトが動作しないそうです。 function extract(str,regexp) { RMATCH = (match(str,regexp) ? substr(str,RSTART,RLENGTH) : "") return RSTART } extract($0,*@lobogris2) { print RMATCH } さて、ど…

文字列の置換

Changing xxxAxxxx to xxxBxxxxC 以下のような置換を行いたいと最初書いていましたが、Ed が怒るのも当然で、実際には少し異なります。 xxxxA -> xxxxBC xxxAxxxx -> xxxBxxxxCなんだか良く分からない 'A' という文字列を 'B' にして最後に 'C' を付けること…

フィールドの削除

completely removing fields なんか最近見かけた話題ですが、 $ echo fld1 fld2 fld3 fld4 fld5 | awk '{$1=$2=""; print}' fld3 fld4 fld5の先頭のスペースが邪魔ということですが、これはフィールドが削除できていないのではなく、FS が出力されているだけ…

配列数を数える

How to find the size of an array dimension 私もはじめて知ったりしましたが、 $ gawk 'BEGIN {split("the quick brown fox",A);print "Number ofelements:",length(A)}' Number ofelements: 4でできたんですね。orz Sun Jun 26 16:37:59 2005 Arnold D. R…

パターンにマッチするまで表示する

Printing file contents until a pattern is matched 質問はタイトルのとおりですが、答えは以下のとおりです。 NR==1,/endpat/ ゴルフにも使えそうな内容ですね。 1,/endpat/ の挙動は違うという話に発展していますが、これは最初の '1' で台無しになってい…