コミュニティ/Netnews 斜め読み

トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

comp.lang.awk

  • Netnews の comp.lang.awk を適当に日本語訳して抜粋してあります。(本当に適当です)
  • 書き込んだ人の名前の部分はオリジナルの投稿者の名前に変更させていただきましたが、時間までは変更していません。詳しくは、comp.lang.awk を購読していただくか、Google グループの comp.lang.awk などで確認してください。
  • 件数が増えてきたら古いものから順に過去ログに移動します。過去ログは [complangawk] から参照できます。

最近のタイトル一覧

[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ]

comp.lang.awk

お名前
件名
本文

Help with Text Manipulation - Andrew Stephen (2006年05月13日 01時11分50秒)

設定ファイルの数をアップデートするのに使っているスクリプトがあり、4 つの数字の IP アドレスを自動生成させます。

echo -n "Enter the Store ID Number : "
read  -e STORENUM

1099 の場合には 10.10.99.100 となります。

6005 の場合に 10.60.5.100 にします。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/d55dd6f411200c55/9b36823d3933b591?hl=ja#9b36823d3933b591


Re: - Ed Morton (2006年05月13日 01時12分42秒)

$ var=1099
$ printf "10.%d.%d.100\n" "${var%??}" "${var#??}"
10.10.99.100
$ var=6005
$ printf "10.%d.%d.100\n" "${var%??}" "${var#??}"
10.60.5.100

を試してください。また、これは shell の質問だと思われます。

Re: - Don Stokes (2006年05月13日 01時14分17秒)

このままだと、

$ var=6008
$ printf "10.%d.%d.100\n" "${var%??}" "${var#??}"

bash: printf: 08: invalid number

10.60.0.100

となるので、

$ var=6008
$ printf "10.%d.%d.100\n" $(expr "${var%??}" + 0)  $(expr "${var#??}" + 0)
10.60.8.100

とします。

Re: - Ed Morton (2006年05月13日 01時15分28秒)

ksh の場合には、

$ var=6008
$ printf "10.%d.%d.100\n" "${var%??}" "${var#??}"

printf: 08 not completely converted

10.60.0.100
$ printf "10.%d.%d.100\n" $((${var%??})) $((${var#??}))
10.60.8.100

となります。

{{comment multi|w}}

Modify timestamp in the log file - thuang2 (2006年05月11日 01時00分30秒)

############
Query time - May 8 07:59:14 PDT 2006

Query has no entries
############
Query time - May 8 08:59:14 PDT 2006
[Some content here]
...
############
Query time - May 8 09:59:14 PDT 2006

Query has no entries

のようなログファイルがあり、"Query has no entries" のところにも日付をつけます。

どれが最後の "Query has no entries" なのかを調べる必要がありますか?また、タイムスタンプを変更する必要がありますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/6e09a4b4c8c04eff/7e786ed78c2d67c8?hl=ja#7e786ed78c2d67c8


{{comment multi|w}}

fprint syntax for repeating fields - trexx (2006年05月09日 23時56分09秒)

printf "%10.3f%10.3f%10.3f\n", $1,$2,$3

といった反復する printf を FORTRAN のように 3f10.3 と記述することはできますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/e7aa5a80f6442083/86b8864ff3072d48?hl=ja#86b8864ff3072d48


Re: - heiner (2006年05月11日 00時55分44秒)

fprint のフォーマットは使えませんが、以下のものを使ってみてください。

function rep(n,s  ,r)
{
    r = ""
    while( n-- > 0 ) r = r s
    return r
}

printf( rep(3,"%10.3f") "\n", $1,$2,$3 )

Re: - martin cohen (2006年05月11日 00時56分22秒)

function rep(n, s       , r)
{
  r = sprintf("%*s", n, " ")
  gsub(/ /, s, r)
  return r
}

これでも大丈夫です。

{{comment multi|w}}

joining lines - micklee74 (2006年05月09日 00時31分48秒)

<ABCD
asdfljfglkfdjgsdjkhfgaklshdfkashfkhaskdfjhasf
<DSFS
laskflsajdflkasjdflasjflasjflasjlfkjasldfjaslkjdflaskjd

というのを

<ABCD asdfljfglkfdjgsdjkhfgaklshdfkashfkhaskdfjhasf
<DSFS laskflsajdflkasjdflasjflasjflasjlfkjasldfjaslkjdflaskjd

とするのには awk ではどうやりますか。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/aa28b60d1fe514ad/e015bcd970211e23?hl=ja#e015bcd970211e23


Re: - Janis Papanagnou (2006年05月09日 00時32分07秒)

/^</{s=$0;next}{print s,$0}

Re: - Kenny McCormack? (2006年05月09日 00時32分29秒)

ORS=NR%2?" ":"\n"

{{comment multi|w}}

Remove carriage returns - patrick (2006年05月07日 00時17分47秒)

te TAG
 xt
aaaaaaaaa

というファイルがあり、

text
aaaaaaaaa

としたいのです。

\r と \n を除去したいのですが、Solaris の awk と nawk ではできませんでした。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/20e504fe007af7f7/261728333a6a951a?hl=ja#261728333a6a951a


Re: - Janis Papanagnou (2006年05月07日 00時18分33秒)

awk 'BEGIN{RS=""}{sub(/ TAG\n /,"",$0)}1'

Re: - patrick (2006年05月07日 00時19分38秒)

Solaris の awk では

awk: syntax error near line 1
awk: illegal statement near line 1
awk: syntax error near line 1
awk: bailing out near line 1

とエラーになりましたが、nawk ではうまくいきました。

Re: - Ed Morton (2006年05月07日 00時20分24秒)

Solaris では nawk か /usr/xpg4/bin/awk を使ってください。

{{comment multi|w}}

export records from log files based on a number id - mrirfanshareef (2006年05月04日 23時37分29秒)

BUSORG_ORGID 数の異なる多くのメッセージを処理します。

awk /^START/,/^END/ *.rv  >results

のようにしたいのですが、

$2 が数字の場合には、

awk /^START/,/^END/ &&  $2==358307 *.rv  >results

のようにします。

ログは以下のようなものです。

START: Mon Apr 24 10:08:43 2006:
Mon Apr 24 10:08:44 2006: service: before tpcall(), buffer being
sent...
G_FLAG  0
CLFY_SUB  ListBeneficiaryDetails
MESSAGE_ID  9F99CCE4-5644-49F3-8AB4-CBAEB2861563
BUSORG_ORGID  358307

service: now I'm sending that...
Mon Apr 24 10:08:44 2006: Mon Apr 24 10:08:44 2006: service: after
tpcall(), buffer received...
E_NUMBER  0
G_FLAG  0
G_ROWCOUNT  8
CLFY_SUB  namesOfSomeTrigger
MESSAGE_ID  bla
BUSORG_ORGID  358307

END:

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/018d41866d3752da/d18784bc0236b652?hl=ja#d18784bc0236b652


Re: - mrirfanshareef (2006年05月04日 23時39分05秒)

/^START/ { ok=0; sec="" }
/^START/,/^END/ { sec=sec "\n" $0 }
$2==380217 { ok=1 }
/^END/ && ok { print sec }

というのを考えましたが、特定のロジックにしか使えません。

{{comment multi|w}}

Awk vs Perl for this assignment - amerar (2006年05月04日 23時27分56秒)

awk と Perl とどちらが良いかを試しています。巨大なレコードで 5000 バイトあり、これを解析して表示します。

連想配列に格納しようとしていますが、どちらが良いでしょうか。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/f304e8100ae0a123/79a722e2006dec08?hl=ja#79a722e2006dec08


Re: - Harlan Grove (2006年05月04日 23時30分15秒)

GUI を使わなくって、あなたの awk がレコードを扱うことができれば、ほとんど差はないでしょう。awk の方がセミコロンを省略できます。

Re: - Janis Papanagnou (2006年05月04日 23時32分27秒)

これは awk よりも shell が良いかもしれません。入出力は以下のように awk を使えばできます。

{
     for (nf=1; nf<=NF; nf++) {
         print nf, $nf >"/dev/tty"   # whatever to ask for interactively
         getline input <"/dev/tty"
         printf ("%s -> %s", $nf, input) > "yourfile"   # example output
     }
     print > "yourfile"
     close ("yourfile")
     system ("whatever-shell-command-to-invoke-for yourfile")
}

Re: - Ed Morton (2006年05月04日 23時33分48秒)

話だけを聞くと shell のような気がします。ですから、comp.unix.shell にも投げた方が良いでしょう。

{{comment multi|w}}

insert line depending on a previous one and directory listing - Sebastian Luque (2006年04月29日 23時04分12秒)

@ARTICLE{1597,
  author = {Doe, J.},
  title = {title X},
  journal = {journal X},
  year = {digits},
  volume = {digits},
  pages = {digits-digits},
  key = {digits},
}

@ARTICLE{5048,
  author = {Doe, J. and Simpson, W. and Whoever, B.},
  title = {title Y},
  journal = {journal Y},
  year = {digits},
  volume = {digits},
  pages = {digits-digits},
  key = {digits},
  number = {digits},
}

という BibTe?X のファイルがあります。

これを以下のルールで処理する gawk のスクリプトを作ろうとしています。

  1. 作者がひとりなら pdf = {Doe99.pdf}
  2. 作者が二人なら pdf = {Doe&Simpson02.pdf}
  3. それ以上なら pdf = {Doeetal04.pdf}

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/53bf0bdae4fa7049/6462d9d5bc1b7b3a?hl=ja#6462d9d5bc1b7b3a


Re: - Jurgen Kahrs (2006年04月29日 23時07分05秒)

{
  if (system("test -f " $1 ) == 0) {
    print "file exists"
  } else {
    print "file doesnt exist"
  }
}

まず、これでファイルがあるかどうかをチェックしてみてください。

{{comment multi|w}}

Converting a number - Ste (2006年04月28日 21時28分49秒)

TIME='cat $OUTPUT | awk -F"|" {'print $2'}'

echo $TIME は 0.0013 となっていて、秒を示していますが、欲しいのはミリ秒で 13 (0.0013 ではなく、0.013 では? : さいとう注) と表示させたいのですが、どうすればいいでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/2250f7f9b2c0264c/d9e352ecdc02e1d1?hl=ja#d9e352ecdc02e1d1


Re: - Juergen Kahrs (2006年04月28日 21時30分16秒)

1.3 では?

LANG=C TIME='cat $OUTPUT | awk -F"|" '{print 1000 * $2}'

というのでいかがでしょう。

あなたの locale で小数点表記が変わってしまうことに注意してください。

Re: - Ed Morton (2006年04月28日 21時31分07秒)

LANG=C TIME=`awk -F"|" '{print 1000 * $2}' "$OUTPUT"`

{{comment multi|w}}

Awk Script with multiple condition... - bshah (2006年04月27日 22時58分24秒)

awk '$1 >= 50 && $1 <= 375 && $2 ~ /^[e-kr-z]/ { total+=$1;print $2}
END { print total " MB" > "/dev/tty" }' temp_file> result_file

のような awk スクリプトを作成しました。temp_file は以下のとおりです。

52 tst1
75 tst2
44 tst3
63 tst4

$1 が 50 から 375 の間で $2 が e-k または r-z に該当すれば総計します。

これに新しい条件を加えます。

UID=`ldapsearch -x -h ldap uid=$2 mailhost | grep -c mailHost`; if [
$UID -eq 1 ]

もし UID が 1 なら result_file に書き出し、それ以外はリジェクトします。

awk '$1 >= 50 && $1 <= 375 && $2 ~ /^[e-kr-z]/  && UID=`ldapsearch -x
-h ldap uid=$2 mailhost | grep -c mailHost`; if [ $UID -eq 1 ] {
total+=$1;print $2} END { prin
t total " MB" > "/dev/tty" }' temp_file> result_file

と書いたのですが、エラーになってしまいます。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/83a7c34a9285df90/2af39d54b5c96e3a?hl=ja#2af39d54b5c96e3a


Re: - Brian Inglis (2006年05月04日 23時24分36秒)

awk UIDS="`ldapsearch -x -h ldap uid=$2 mailhost | grep -c mailHost`"\
 '$1 >= 50 && $1 <= 375 && $2 ~ /^[e-kr-z]/ && UIDS == 1 { total+=$1;
print $2 }
END { print total " MB" > "/dev/tty" }' temp_file > result_file

を試してみてください。

Re: - Brian Inglis (2006年05月09日 00時30分09秒)

読み違えていたので、これを試してください。

awk '$1 >= 50 && $1 <= 375 && $2 ~ /^[e-kr-z]/ { total + =$1;
cmd = "ldapsearch -x -h ldap uid=" $2 " mailhost | grep -c mailHost";
cmd | getline uids; close(cmd); if (uids == 1) print $2 }
END { print total " MB" > "/dev/tty" }' temp_file > result_file

{{comment multi|w}}

Round number depending on error - burkina (2006年04月26日 00時59分15秒)

8.932 +- 0.877
0.443 +- 0.00734

8.9 +- 0.9
0.443 +- 0.007

のように表記を変更します。

2 つめの数字は最初の 0 でない数で丸め、その単位で 1 つめの数字を丸めようとしています。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/64d92d3264fb256a/59a998fb9ee66c6f?hl=ja#59a998fb9ee66c6f


Re: - dbcat (2006年04月26日 01時00分03秒)

awk -F"+-" '{
str=10^length(int(1/$2))*$2
if(substr(str,3)>50){
print $1"+-"(int(str)+1)*$2/str;
}else{
print $1"+-"int(str)*$2/str
}
}'

というものでどうでしょうか。

Re: - burkina (2006年04月26日 01時02分13秒)

awk '{r=length(int(1/$2))}{printf"%1."r"f\n", $1}' test.dat

というもので、ほとんど対応できるのですが、整数部分で丸められてしまいます。

Re: - burkina (2006年04月26日 01時03分06秒)

awk '{r=length(int(1/$2))}{printf"%1."r"f\n", $1}' test.dat

というもので、ほとんど対応できるのですが、整数部分で丸められてしまいます。

Re: - burkina (2006年04月26日 23時36分14秒)

自分に満足できるものができました。

awk '{sign=int($2)} {if(sign<2) { {r=length(int(1/$2))}
{str=int(10^r*$2)} {if (str==1) { {printf"%."r+1"f %."r+1"f\n", $1,$2}
} else {printf"%."r"f %."r"f\n", $1,$2} } } else {
{dec=10^(length(sign)-1)} {if (int($2/dec)==1) {dec=dec/10} }
{if($1-(int($1/dec)*dec)>0.5*dec) {$1=int($1/dec)*dec+dec} }
{if($2-(int($2/dec)*dec)>0.5*dec) {$2=int($2/dec)*dec+dec} } {printf"%i
%i\n", int($1/dec)*dec, int($2/dec)*dec } } }' test.dat

{{comment multi|w}}

Multiple conditional expression? - Ennio-(Sr) (2006年04月23日 02時38分12秒)

PostgreSQL のファイルを読み込んで色分けをしようとしています。

home/foo$ less prova_tab |awk ' {if ( $13 >= $7 ) print "\033[1;35m" \
$0; else if ($13 >= $9) print "\033[0;33m" $0; \
else print "\033[1;36m" $0 } '
 rif |  d_r_mnt   | quantity | montante | c.m.f.  |  d_r_cmf \
                                           | ultima_quot |       titolo
-----+------------+----------+----------+---------+------------\
                                    +-------------+--------------------
 1   | 2005-09-15 |      800 |  54.8963 | 23.9112 | 2004-07-23 \
                                               |       30.34 | brown OK
 26  | 2005-09-15 |     1000 |   6.1110 | 6.11098 | 2005-09-15 \
                                                       5.861 | cyan OK
 3   | 2005-09-15 |     2720 |  18.7311 |   6.057 | 2004-07-23 \
                                               |      10.154 | why not brown?
 6   | 2005-09-15 |    36017 |   3.7151 |   2.703 | 2004-07-23 \
                                               |       4.709 | magenta OK
 11  | 2005-09-15 |     2500 |  20.5815 |  10.537 | 2004-07-23 \
                                               |       3.962 | wrong!
 32  | 2005-10-07 |    10000 |   0.5590 | 0.55896 | 2005-10-07 \
                                               |       1.114 | OK
 5   | 2005-09-15 |     2500 |   9.5365 |   5.998 | 2004-07-23 \
                                               |       2.494 | OK

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/5f0c0d09e9c25fe5/a07c915f040d3c9a?hl=ja#a07c915f040d3c9a


Re: - Jurgen Kahrs (2006年04月23日 02時39分30秒)

xterm では問題なく動作しています。

上の URL にあるように xgawk ならそのまま PostgreSQL が読めます。

{{comment multi|w}}

Date changing? - Ste (2006年04月20日 00時08分16秒)

<Apr 18, 2006 11:42:24>

というようなタイムスタンプの形式を変更することはできますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/bb561facde375119/75e928713360addb?hl=ja#75e928713360addb


Re: - Jurgen Kahrs (2006年04月20日 00時09分40秒)

gawk の mktime() を使えば 1970 年からの経過秒数に変更できます。

現在時刻は systime() で得られます。

Re: - Ste (2006年04月20日 00時10分18秒)

今のシステムは HP-UX ascari B.11.11 U 9000/800 なので gawk は使えないかもしれません。

Re: - Jurgen Kahrs (2006年04月20日 00時11分07秒)

カレンダー関数がググれば見つかると思います。

Re: - Ed Morton (2006年04月21日 00時02分02秒)

ダウンロードしてインストールしてください。結果的に大幅なご利益があります。

Re: - Jurgen Kahrs (2006年04月21日 00時03分21秒)

この前 HP-UX にインストールしましたが、素直にはインストールできませんでした。特に GCC がないと大変です。

{{comment multi|w}}

file1 and file2 - pavan.kristipati (2006年04月20日 00時05分09秒)

file1 は 5000 レコードあり、file2 は 100 レコードです。file2 は file1 のキーを持っており、該当する部分を削除したいです。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/8e30d55dd6e01667/fb80ab2ad82cbdac?hl=ja#fb80ab2ad82cbdac


Re: - Ed Morton (2006年04月20日 00時05分23秒)

awk 'NR==FNR{keys[$2];next}{for (k in keys) if (k ~ $0) next}1' file2 file1

{{comment multi|w}}

file1 and file2 - pavan.kristipati (2006年04月20日 00時01分35秒)

file1 は 5000 レコードあり、file2 は 100 レコードです。file2 は file1 のキーを持っており、該当する部分を削除したいです。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/8e30d55dd6e01667/fb80ab2ad82cbdac?hl=ja#fb80ab2ad82cbdac


{{comment multi|w}}

req. help gawk handling iso latin 1 chars on windows - despalottes (2006年04月19日 00時25分02秒)

Windows2000 上での gawk 3.1.4 です。

ISO Latin 1 を使っています。

  • toupper() と tolower() work は ok
  • IGNORECASE=1, 'a' == 'A' は ok、しかし 'A+grave accent' != 'a+grave accent'
  • IGNORECASE=1, 'a' ~ 'A' は ok、しかし 'A+grave accent' !~ 'a+grave accent'
  • 'a' は [:alpha:] にマッチするが、'a+grave accent' はマッチしない
  • 'a+grave accent' は /\<.\>/ のような正規表現の中の \< \> 境界はマッチする

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/a92c3a2c1bb4eae9/fe108e711c131dd9?hl=ja#fe108e711c131dd9


Re: - Juergen Kahrs (2006年04月19日 00時27分21秒)

xgawk でも同じような問題がありました。Windows で locale の指定は望まれていないように思います。

Re: - Kees Nuyt (2006年04月19日 23時58分36秒)

LC_ALL を ISO Latin 1 にして試してみてもらえないでしょうか?

Re: - Manuel Collado (2006年04月20日 23時58分11秒)

一体どの awk を使っているのでしょうか?

  • Cygwin
  • MinGW
  • DJGPP
  • Other

Re: - Perique des Palo (2006年04月20日 23時59分40秒)

以下の gawk です。

{{comment multi|w}}


Re: - きむら (2006年04月20日 02時00分40秒)

Windows用のビルドはデフォルトだと、setlocaleを呼び出さないんですよね(常にCロカールで動作)。よびだせば、少なくともカレントコードページのカルチャーに従った判定はしてくれるようになるんですが。もっともutf-8問題みたいのがでるけど(笑)つーことでkeesの回答はちょっと勘違い。

Re: - さいとう (2006年04月20日 12時15分13秒)

Kees の回答は解答ではないのですが、やはり英語圏では locale を C にしている人が多いということでしょうかね。

とかでもダメみたいなので、setlocale を呼んでいないのが正解なのですが、comp.lang.awk に回答してみます? (w

Re: - きむら (2006年04月20日 16時13分28秒)

んー、メアド晒したくないっす(笑)英語spam今でも多いのに(^^;

Re: - さいとう (2006年04月20日 22時33分28秒)

英語スパム多いよね〜。日本語入れるとさらに多くなります。SpamAssassin? ないと死にそうです。

{{comment multi|w}}

matching glob patterns? - danmc91 (2006年04月19日 00時17分57秒)

glob のパターンマッチングはできますか?

foo+-{,-bin,-gtk{1,2}}-2.3{,p[0-9]}

のようなものを

foo\+-(()|(-bin)|(-gtk((1)|(2)))-2\.3(()|(p[0-9]))

にします。

そこで以下のようなものを作ってみました。

for( i in a) {
  name = a[i];

  for(j in b) {
    pat = b[j];
    reg = glob2regexp(pat);

    if( name ~ reg) {
        print "we have a match";
    }
}

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/f2cf8dc7acd77880/0c28a7be4d18fd36?hl=ja#0c28a7be4d18fd36


Re: - John DuBois? (2006年04月19日 00時19分19秒)

ここに sh-style の glob があります。

{{comment multi|w}}

get a word from a line matched by the preceding word.. - reuben12 (2006年04月18日 02時01分30秒)

one two, three(three) four TYPE value ...

のように並んでいます。

Perl であれば

if( $_ =~ m/CONFIGURATION ([A-Za-z]+) /i )
{
    print OFILE $1 ;
}

のようにできるのですが、以下のようにやってもうまく動作しません。

#!/bin/ksh
value=`test.exe | grep sync | grep -v grep | grep $1 | awk ' $0 ~
/CONFIGURATION \w*/ { print $1}'`

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/6fa9bb73859a90bb/08b91438dbbafdc7?hl=ja#08b91438dbbafdc7


Re: - Bob Harris (2006年04月19日 00時14分37秒)

#!/bin/sh
value=`echo "sync atype CONFIGURATION thisword def" | awk -v
TYPE="$1" '
    /sync/ && $0 ~ TYPE {
        match($0,/CONFIGURATION/)
        $0 = substr($0,RSTART+RLENGTH)
        print $1
    }
'`
echo $value

このような方法でできます。grep を全て含んだ実装になっています。

Re: - Ed Morton (2006年04月19日 00時15分18秒)

awk 'f{sub(/.* TYPE */,"");sub(/ .*/,"");print;f=0}/CONFIGURATION/{f=1}' file

ただし、あなたの OS に依存します。

Re: - reuben12 (2006年04月20日 23時55分33秒)

# ./test2.sh temp
awk: syntax error near line 2
awk: bailing out near line 2
./test2.sh: ^J    /sync/ && $0 ~ TYPE {^J
match($0,/CONFIGURATION/)^J        $0 = substr($0,RSTART+RLENGTH)^J
   print $1^J    }^J: not found

# cat test2.sh
#!/bin/sh
value=`echo "sync atype CONFIGURATION thisword def" | awk -v
TYPE="$1" '
    /sync/ && $0 ~ TYPE {
        match($0,/CONFIGURATION/)
        $0 = substr($0,RSTART+RLENGTH)
        print $1
    }
'`
echo $value
# which awk
/bin/awk
# uname -a
SunOS hlr900 5.9 Generic_118558-24 sun4u sparc SUNW,Netra-240
#

このようなものを実行するとエラーになりました。どなたかご指南ください。

Re: - Ed Morton (2006年04月20日 23時56分10秒)

gawk か nawk か /usr/xpg4/bin/awk を使いなさい。

Re: - reuben12 (2006年04月20日 23時56分35秒)

nawk で動作しました。

Re: - surferelf (2006年04月28日 21時26分08秒)

以下のものでは何が悪いのでしょうか?

gawk '{for(i=1;i<=NF;i++){if($i ~ /CONFIGURATION/){print $(i+1)}}}'

{{comment multi|w}}

split - vjyanand (2006年04月18日 00時35分32秒)

name      m1             m2             m3
xxxxx     1                12               3
xxxxx     1                22               53
xxxxx     1                32               34
xxxxx     1                42               2
yyyyy     1                52               13
yyyyy     1                62               33
yyyyy     1                2                4
aaaaa     1                2                34
aaaaa     1                2                35
aaaaa     1                2                36
...........
............
..........

というファイルがあり、これをタブではなく csv で、name ごとに別のファイルにしたいのです。

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/52961de4cd6c5074/d54fdae4aab99a7b?hl=ja#d54fdae4aab99a7b


Re: - Janis Papanagnou (2006年04月18日 00時37分21秒)

  BEGIN { getline header }
  !($1 in keys) { keys[$1]; print header > "file-"$1 }
  { print > "file-"$1 }

どのくらいの keys の数があるか分かりませんが、必要に応じて close してください。

Re: - Janis Papanagnou (2006年04月18日 00時38分06秒)

BEGIN 行の後にこれを挿入してください。

$1 != oldkey { close("file-"oldkey); oldkey = $1 }

{{comment multi|w}}

rand(), macosx - giacomo boffi (2006年04月15日 22時09分30秒)

awk '{a[i++]=$0} END{printf(a[int(rand()*i)])}' < textfile

は mawk で動作します。gawk でも同じです。

gawk '{a[i++]=$0} END{srand();printf(a[int(rand()*i)])}' < textfile

でも Mac OS X では毎回同じ値を返します。どうも srand() の直後の rand() が毎回同じ値を返しているようです。

$ for i in 1 2 3 4 5 6 7 8 ; do
>   echo|awk 'END{srand();print rand() " " rand()}'
>   sleep 1
> done
0.562426 0.690584
0.562434 0.822122
0.562441 0.953659
0.562449 0.0851971
0.562457 0.216735
0.562465 0.348273
0.562473 0.479811
0.562481 0.611348
$

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/30d17c2dcdde2b52/72d65fce0f048401?hl=ja#72d65fce0f048401


Re: - Andrew Schorr (2006年04月19日 00時12分55秒)

rand() が最初に呼ばれた時には時間が種になります。

bash-2.05b$ gawk 'BEGIN {t = systime(); for (i = 0; i < 10; i++)
{srand(t+i); print rand()}}'
0.967982
0.229524
0.128006
0.440922
0.99316
0.312136
0.366258
0.00166487
0.808085
0.58239

となり、うちでは再現しませんでした。

xgawk (http://sourceforge.net/projects/xmlgawk) を使えば、以下のようなこともできます。

bash-2.05b$ xgawk -ltime 'BEGIN {for (i = 0; i < 10; i++)
{srand((1000000 * gettimeofday()) % 1000000000); print rand()}}'
0.501737
0.127429
0.0532197
0.224957
0.849589
0.593419
0.306513
0.67219
0.193453
0.662058

{{comment multi|w}}

[ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ]


最終更新時間:2007年07月30日 22時13分35秒