|
>>4574 さん、ありがとうございます。 # mail 'dareka@[172.16.10.3]' を指定すると、 Diagnostic-Code; X-Postfix; host 172.16.10.3[172.16.10.3] said: 550 5.1.1 <dareka@[172.16.10.3]>... Not local user, server is not relaid. Recipient error (in reply to RCPT TO command) と言われます。 試みに dareka というコンピューターユーザーを W に作ってみましたが 現象は変わりませんでした ;;; 教えていただいたリンクをたどって http://www.kobitosan.net/postfix/jhtml/faq.html#intranet に到達していくつかのことをやってみました。 ・/etc/postfix/main.cf で disable_dns_lookups = yes と書けば /etc/hosts を見に行って W.windows.net の名前解決をしてくれる? =>ダメでした(dareka@W.windows.net で host not found になる) ・さらに /etc/postfix/main.cf で relayhost = W.windows.net と書く =>同じ状況です。 (# mail dareka@W.windows.net で host not found、 # mail 'dareka[@172.10.16.3]' で not a local user) ・/etc/postfix/main.cf で relayhost = W.windows.net と書く =>同じ状況です。 (# mail dareka@W.windows.net で host not found、 # mail 'dareka[@172.10.16.3]' で not a local user) これ、W.windows.net の smtp サーバーである pmail が POP before SMTP auth をやっているのが原因かも・・・。 (フリー版の制約で切れない) ・relayhost の設定をやめ、 transport_maps = dbm:/etc/postfix/transport と設定する。 /etc/postfix/transport の中身を windows.net :[W.windows.net] .windows.net :[W.windows.net] にし、postmap /etc/postfix/transport をしてから、 postfix reload する。 (/etc/postfix/transport の前に hash、db、dbm などの何をつけるかは postmap が生成するデータベースによる。 間違うと postfix reload で怒られる) =>同じ状況です。 ・/etc/postfix/transport の中身を windows.net :[172.16.10.3] .windows.net :[172.16.10.3] とか windows.net smtp:[W.windows.net] .windows.net smtp:[W.windows.net] とか windows.net smtp:[172.16.10.3] .windows.net smtp:[172.16.10.3] とかにしてみる。 =>同じ状況です。。。 ううーん、困った。 でも人に聞きながらやってると整理がついていいですね (^^) |
|
>>4547 ありがとうございます。 どうも、無理みたいですね。 1年。つまり、同じ年ということであるのならば、何とかできるの でしょうが、年をまたいでしまうと無理ですね。 >Jan や Feb のソートについては、sed で 01 や 02 に置換すれば >何とでもできるでしょう。 すみません。方法教えてください。 > >>4567 まんたろう > は現実的な落としどころと考えます。 現実な落としどころとは。? |
|
BCCでwindowsプログラムをコンパイルしようとすると 「外部シンボル '_main' が未解決」というのが出てしまいます。 「-WオプションをつけてコンパイルすればWindowsアプリができます」と本に 書いてあるのですが、どうすればいいのかわかりません |
|
以下の様なカンマ区切りのファイルがあります。 001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,, 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:456,001:002,100:200,A01:A02,0:1 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:,:,:,A01:A02,: フィールドの11カラム以降からは、コロン区切りで複数設定されている場合がある ので、複数行に分けたいのです。 以下の様に、 001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,, 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,001,100,A01,0 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,456,002,200,A02,1 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,,,A01, 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,,,,A02, に編集し、ファイルに出力したいのですが、11カラム以降の処理が上手く行きません。 3通りほど、試してみたのですが、それぞれ駄目でした。 どこがいけないのかとどうすればよいのかを教えてください。 環境は、 Solaris8、Bシェル です。 No.1 ----------------------------------------------------------------- #!/bin/sh # if [ $# -eq 0 ] ; then echo "$0 FileName" exit 1 fi FILE=$1 OUT_FILE=kekka.log rm ${OUT_FILE} > /dev/null 2>&1 nawk -v OUT=${OUT_FILE} ' function max_desc(lstadr,lst) { m=split(lstadr,lst,":") ; return m ; } { cnt=1 ; n=split($0,arglst,",") ; for(i=11;i<=n;i++) { m=max_desc(arglst[i],lst["${i}"]) ; if (m>cnt) { cnt=m ; } } no=1 ; for(i=1; i<=cnt; i++) { for(j=1; j<=n; j++) { if (j==2) { printf("%d,",no++) >> OUT ; } else if (j==11 || j==12 || j==13 || j==14 || j==15 || j==16) { printf("%s,",lst["${j}"][i]) >> OUT ; } else { printf("%s,",arglst[j]) >> OUT ; } } printf("\n") >> OUT ; } }' ${FILE} exit 0 No.2 ----------------------------------------------------------------- #!/bin/sh # if [ $# -eq 0 ] ; then echo "$0 FileName" exit 1 fi FILE=$1 OUT_FILE=kekka.log rm ${OUT_FILE} > /dev/null 2>&1 nawk -v OUT=${OUT_FILE} ' function max_desc(lstadr,lst) { cnt=split(lstadr,lst,":") ; return cnt ; } { num=1 ; n=split($0,arglst,",") ; for(i=11;i<=n;i++) { ret=max_desc(arglst[i],lst[++x,y]) ; if (ret>num) { num=ret ; } } nf=x ; no=1 ; for(y=1; y<=num; y++) { for(j=1; j<=10; j++) { if (j==2) { printf("%d,",no++) >> OUT ; } else { printf("%s,",arglst[j]) >> OUT ; } } for(x=1; x<=nf; x++) { printf("%s,",lst[x,y]) >> OUT ; } printf("\n") >> OUT ; } }' ${FILE} exit 0 No.3 ----------------------------------------------------------------- #!/bin/sh # if [ $# -eq 0 ] ; then echo "$0 FileName" exit 1 fi FILE=$1 OUT_FILE=kekka.log rm ${OUT_FILE} > /dev/null 2>&1 nawk -v OUT=${OUT_FILE} ' function max_desc(lstadr,lst,x) { cnt=split(lstadr,arrlst,":") ; for(j=1;j<=cnt;j++) { lst[x,j]=arrlst[j] ; } return cnt ; } { num=1 ; n=split($0,arglst,",") ; for(i=11;i<=n;i++) { ret=max_desc(arglst[i],lst[++x,y],x) ; if (ret>num) { num=ret ; } } nf=x ; no=1 ; for(y=1; y<=num; y++) { for(j=1; j<=10; j++) { if (j==2) { printf("%d,",no++) >> OUT ; } else { printf("%s,",arglst[j]) >> OUT ; } } for(x=1; x<=nf; x++) { printf("%s,",lst[x,y]) >> OUT ; } printf("\n") >> OUT ; } }' ${FILE} exit 0 |
|
>>4579 べた これが賢いやり方とも思えませんが、一応作ってみました。 ------ $ cat a.awk BEGIN { FS=","; chk_col=11; } { if ($chk_col ~ /:/) { str_head=head_string(); split_num=split($chk_col, str_foot, ":"); for (i=1; i<=split_num; i++) { for (j=chk_col+1; j<=NF; j++) { split($j, col_buf, ":"); str_foot[i]=sprintf("%s,%s", str_foot[i], col_buf[i]); } print str_head "," str_foot[i]; } } else { print; } } function head_string() { str_buf=$1; for (k=2; k<chk_col; k++) { str_buf=sprintf("%s,%s", str_buf, $k); } return str_buf; } ------ ------ $ cat a 001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,, 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:456,001:002,100:200,A01:A02,0:1 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111:222,123:,:,:,A01:A02,: ------ ------ $ awk -f a.awk a 001,a2,a3,a4,a5,a6,a7,a8,a9,a10,,,,,, 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,001,100,A01,0 002,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,456,002,200,A02,1 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,111,123,,,A01, 003,a2,a3,a4,a5,a6,a7,a8,a9,a10,222,,,,A02, ------ >>4571 68user 今更ですが、Solarisでは $ echo "Apr 02 12:25:00 ===" | sort -M - logfile | \ sort -n -k2,3 | cat -n | grep "===" | awk '{print $1}' 等としないとダメみたいです。 |