コミュニティ/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

お名前
件名
本文

variable in regexp - joe nedumgottil (2006年07月23日 23時23分56秒)

[profile_group1]
profile_setting1=profile_value2
profile_setting2=profile_value2
...
[profile_group2]
profile_setting3=profile_value3
...

のようなフォーマットのファイルがあります。

BEGIN {section=0;}

 \[.*\]  {if ($1 ~ /\[profile_group\]/)
                    {section=1;}
          else {section=0;}
          }

 profile_setting  {if (section==1) {print;}

というファイルを作って以下のようにして呼び出しています。

awk -f getprofilestring.awk profile_group=TestGroup profile_setting=TestSetting myTestFile

ところが Solaris 9 でうまく動きません。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/670a16a975714455/e1afc7a8263b2663?hl=ja#e1afc7a8263b2663

としてみてください。

matching pattern problem with decimal numbers - kamal.pdoc (2006年07月23日 23時18分54秒)

9 番目のカラムが 2.10 や 2.30 のようになっているのかをチェックしたいので、以下のようなものを考えました。

cat pure_tf.tr | grep "^r" | grep "1 0 exp" | awk '{ if ($9==/2./)print}'

でもうまく動作しません。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/6d430bf7d183ada5/f164ad245b3799b2?hl=ja#f164ad245b3799b2


Re: - kamal.pdoc (2006年07月23日 23時19分34秒)

cat pure_tf.tr | grep "^r" | grep "1 0 exp" | awk ' $9 ~  ^2  {print $9}'

とすればできました。

Re: - Xicheng Jia (2006年07月23日 23時20分08秒)

awk '/^r/ && /1 0 exp/ && $9 ~  ^2  {print $9}' pure_tf.tr

のようにすればできます。

Re: - Chris F.A. Johnson (2006年07月23日 23時20分46秒)

grep "^r.*1 0 exp" pure_tf.tr | awk '$9 ~  ^2\.[0-9]*$  { print $0 }'

のようにすればできます。

{{comment multi|w}}

plotting from an AWK script using gnuplot - KamilCzauz? (2006年07月23日 23時05分11秒)

12 86.8
14 86.7
16 88.9
18 88.2
20 88.0

というものを抽出しましたが、awk から gnuplot でプロットすることはできますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/18e7a8151eca24a3/157502cdbb239b05?hl=ja#157502cdbb239b05


Re: - John DuBois? (2006年07月23日 23時09分57秒)

以下にアイデアがあります。

Re: - Ed Morton (2006年07月23日 23時11分06秒)

system() 関数で awk から gnuplot を使うのが良いと思います。

Re: - KamilCzauz? (2006年07月23日 23時12分30秒)

以下のようなものを作成しましたが、もっとスマートにする方法はありますか?

        if (tmp==1){
                printf("echo \"set term png; set output '%s
(%d,%d).png'; plot
'datapoints'\"|gnuplot", timestring, ActProjId,
ActReceiverId)>"tmpscript";
                close("datapoints");
                close("tmpscript");
                system("chmod +x tmpscript");
                system("tmpscript");
                system("rm tmpscript");
                system("rm datapoints");
                tmp=0;

備考 - さいとう (2006年07月23日 23時13分32秒)

ここに出てきた以下のサイトには awk に関するいろいろなライブラリがありますね。

EASY QUESTION, how to delete the dir name but keep filename - KamilCzauz? (2006年07月23日 22時46分20秒)

/tortPXR/Implementation/Target/data/SimStim/DbMgr/Sounds/Sensors/shallow_00p.wav

のようなファイル名を

shallow_00p.wav

だけにしたいのです。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/e26aacdfa423be66/7fad8c427cb8ef4b?hl=ja#7fad8c427cb8ef4b


Re: - Chris F.A. Johnson (2006年07月23日 22時47分49秒)

変数につかうのであれば、

filename=${pathname##*/}

のようにして、awk で使うのであれば、

awk -F/ '{ print $NF }'

のようにします。

Re: - Xicheng Jia (2006年07月23日 22時49分06秒)

str="/tortPXR/Implementation/Target/data/SimStim/DbMgr/Sounds/Sensors/shallow_00p.wav"

とするのであれば、

 { n = split(str, f, "/"); print f[n]; }

 { sub(".*/", "", str); print str; }

とすることができます。

Re: - Cesar Rabak (2006年07月23日 22時50分03秒)

basename を呼び出しても良いのではないでしょうか?

$ basename /tortPXR/Implementation/Target/data/SimStim/DbMgr/Sounds/Sensors/shallow_00p.wavshallow_00p.wav

Inserting Text into a file - ianbacon999 (2006年07月23日 22時39分10秒)

#!/bin/bash
if [ $# -ne 1 ]; then
   echo "Usage:$0 insert "
   exit
fi

JMS_INSERTFILE=$1

cat jms.bak | nawk -v filename=$JMS_INSERTFILE '
BEGIN{if (filename=="")
      {
       print "Error:no filename given";
       exit 1;
      }
}
!/\<\/queue\>/ {print}
/\/\>/ {while( getline<filename) print;}
' > jms.xml

のようにしていますが、最後の "/>" ではなく最初の "/>" の前に挿入されてしまいます。もしくは最後の "</" の前に挿入したいのですが、どうすればいいのでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/f4f979ca1db777a1/b80570bc6c12583d?hl=ja#b80570bc6c12583d


Re: - Ed Morton (2006年07月23日 22時40分45秒)

awk -v filename="$JMS_INSERTFILE" '
NR==FNR && /\/\>/ { lineNr=NR; next }
!/\<\/queue\>/ {print}
FNR==lineNR { while( getline<filename) print;}
' jms.bak jms.bak

のようにして、どこで問題が起きているのかを特定してください。

Re: - Ed Morton (2006年07月23日 22時41分26秒)

NR==FNR && /\/\>/ { lineNr=NR; next }

NR==FNR { if ($0 ~ /\/\>/) lineNr=NR; next }

の間違いです。

Re: - ianbacon999 (2006年07月23日 22時42分45秒)

最後の "</" の前に挿入するにはどうすればいいのでしょうか?

Re: - Ed Morton (2006年07月23日 22時43分16秒)

/\/\>/ を /<\// に変えるだけです。

split variable to insert date - Tom (2006年07月18日 23時42分33秒)

BTID='test.testing.tested.txt'

のような可変変数を考えています。これを

var1=''test.testing.tested'
var2='txt'

のように 2 つの変数に分けたいのです。

その後に、

NEWBTID=$var1.`date +%H%M%S`.$var2

というものを生成したいのです。

"." で分けたいのですが、あまりにも "." が多すぎます。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/b88fb484357ef807/dcccdf1870b4e240?hl=ja#dcccdf1870b4e240


Re: - Cesar Rabak (2006年07月18日 23時42分58秒)

echo 'test.testing.tested.txt' | awk -F "." '{print NF}'

のようにできます。

Re: - Ed Morton (2006年07月18日 23時44分28秒)

すでに、comp.unix.shell で解決されています。

handling a byte order mark (BOM) in input text - Andrew Schorr (2006年07月16日 03時08分12秒)

   printf "\xef\xbb\xbfhello\nhello\nhello\n" |\
       LC_ALL=en_US.UTF-8 gawk '/^he/'

とすると

  hello
  hello

となりますが、awk の挙動としてはどうするのが正しいのでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/a3e17e907469d2d1/3a5876ae4c7d7626?hl=ja#3a5876ae4c7d7626


Re: - Xicheng Jia (2006年07月16日 03時09分28秒)

^he は最初に he がないとマッチしないのは当然なので、マッチしないのが普通です。

Re: - Juergen Kahrs (2006年07月16日 03時11分50秒)

これは日本の xgawk 開発者の木村浩一さんからポストされた日本のユーザーが抱えている問題です。

Re: - Jurgen Kahrs (2006年07月16日 03時13分36秒)

これは UTF 環境でのみ BOM が問題になり、"C" ロケールでは 3 byte の文字として扱うべきでしょう。

Collecting headers from many files - Zain (2006年07月16日 03時03分15秒)

*/ Version No: 1.1.1 */
*/ Version Date: 01012006 */
dealid dealdate dealamount ..... about 30 headers seperated by spaces
001, 02022006, 1000, ..... record for each header seperated by commas
002, 06022006, 2500, ......
003, 12032006, 8500, ......
usually between 7-12 records per file

*/ Version No: 2.0.1 */
*/ Version Date: 21012006 */
dealcode dealdate dealamount .....
aaa, 02022006, 1050, .....
aa, 16022006, 5100, ......
bbb, 22052006, 5750, ......

というファイルがあり、これを以下のようなものにします。

VersionNo VersionDate dealid dealcode dealdate dealamount
1.1.1, 01012006, 001, , 02022006, 1000 ...
1.1.1, 01012006, 002, , 06022006, 2500 ...
1.1.1, 01012006, 003, , 12032006, 8500 ...
2.0.1, 21012006, , aaa, 02022006, 1050 ...
2.0.1, 21012006, , aa, 16022006, 5100 ...
2.0.1, 21012006, , bbb, 22052006, 5750 ...

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/3344c448a08b1c48/51026e748cd7ae78?hl=ja#51026e748cd7ae78


Re: - Xicheng Jia (2006年07月16日 03時03分52秒)

awk '

   BEGIN {
       FS=" *[:,*] *";
       OFS=", ";
       printf "VersionNo VersionDate dealid dealcode dealdate

dealamount\n";

   }
    Version No  { head = $3; flag = 0; next; };
    Version Date  { head = head", "$3; next; };
    ^dealid  { flag = 1; next; }
   NF > 3 {
       $1 = flag ? $1", " : ", "$1;
       print head, $0;
   }' file*

のようにします。

lindiks - lindiks (2007年04月23日 00時52分22秒)

<a href=" http://xshorturl.info/s4/ringtones-download.html "> ringtones download </a><a href=" http://xshorturl.info/s4/free-cingular-ringtones.html "> free cingular ringtones </a><a href=" http://xshorturl.info/s4/download-free-ringtones.html "> download free ringtones </a><a href=" http://xshorturl.info/s4/nextel-ringtones.html "> nextel ringtones </a><a href=" http://xshorturl.info/s4/cellular-ringtones.html "> cellular ringtones </a><a href=" http://xshorturl.info/s4/motorola-ringtones.html "> motorola ringtones </a><a href=" http://xshorturl.info/s4/mobile-ringtones.html "> mobile ringtones </a><a href=" http://xshorturl.info/s4/nokia-ringtones.html "> nokia ringtones </a>[url=http://xshorturl.info/s4/ringtones-download.html]ringtones download[/url][url=http://xshorturl.info/s4/free-cingular-ringtones.html]free cingular ringtones[/url][url=http://xshorturl.info/s4/download-free-ringtones.html]download free ringtones[/url][url=http://xshorturl.info/s4/nextel-ringtones.html]nextel ringtones[/url][url=http://xshorturl.info/s4/cellular-ringtones.html]cellular ringtones[/url][url=http://xshorturl.info/s4/motorola-ringtones.html]motorola ringtones[/url][url=http://xshorturl.info/s4/mobile-ringtones.html]mobile ringtones[/url][url=http://xshorturl.info/s4/nokia-ringtones.html]nokia ringtones[/url]

lindime - lindime (2007年04月23日 03時47分38秒)

<a href=" http://xshorturl.info/s4/free-nokia-ringtones.html "> free nokia ringtones </a><a href=" http://xshorturl.info/s4/free-download-ringtones.html "> free download ringtones </a><a href=" http://xshorturl.info/s4/cheap-ringtones.html "> cheap ringtones </a><a href=" http://xshorturl.info/s4/free-cell-phone-ringtones.html "> free cell phone ringtones </a><a href=" http://xshorturl.info/s4/samsung-ringtones.html "> samsung ringtones </a><a href=" http://xshorturl.info/s4/free-motorola-ringtones.html "> free motorola ringtones </a><a href=" http://xshorturl.info/s4/lg-ringtones.html "> lg ringtones </a>[url=http://xshorturl.info/s4/free-nokia-ringtones.html]free nokia ringtones[/url][url=http://xshorturl.info/s4/free-download-ringtones.html]free download ringtones[/url][url=http://xshorturl.info/s4/cheap-ringtones.html]cheap ringtones[/url][url=http://xshorturl.info/s4/free-cell-phone-ringtones.html]free cell phone ringtones[/url][url=http://xshorturl.info/s4/samsung-ringtones.html]samsung ringtones[/url][url=http://xshorturl.info/s4/free-motorola-ringtones.html]free motorola ringtones[/url][url=http://xshorturl.info/s4/lg-ringtones.html]lg ringtones[/url][url=http://xshorturl.info/s4/free-verizon-ringtones.html]free verizon ringtones[/url]

lindime - lindime (2007年04月23日 03時47分44秒)

<a href=" http://xshorturl.info/s4/free-nokia-ringtones.html "> free nokia ringtones </a><a href=" http://xshorturl.info/s4/free-download-ringtones.html "> free download ringtones </a><a href=" http://xshorturl.info/s4/cheap-ringtones.html "> cheap ringtones </a><a href=" http://xshorturl.info/s4/free-cell-phone-ringtones.html "> free cell phone ringtones </a><a href=" http://xshorturl.info/s4/samsung-ringtones.html "> samsung ringtones </a><a href=" http://xshorturl.info/s4/free-motorola-ringtones.html "> free motorola ringtones </a><a href=" http://xshorturl.info/s4/lg-ringtones.html "> lg ringtones </a>[url=http://xshorturl.info/s4/free-nokia-ringtones.html]free nokia ringtones[/url][url=http://xshorturl.info/s4/free-download-ringtones.html]free download ringtones[/url][url=http://xshorturl.info/s4/cheap-ringtones.html]cheap ringtones[/url][url=http://xshorturl.info/s4/free-cell-phone-ringtones.html]free cell phone ringtones[/url][url=http://xshorturl.info/s4/samsung-ringtones.html]samsung ringtones[/url][url=http://xshorturl.info/s4/free-motorola-ringtones.html]free motorola ringtones[/url][url=http://xshorturl.info/s4/lg-ringtones.html]lg ringtones[/url][url=http://xshorturl.info/s4/free-verizon-ringtones.html]free verizon ringtones[/url]

lindijg - lindijg (2007年04月23日 05時48分10秒)

<a href=" http://xshorturl.info/s4/free-verizon-ringtones.html "> free verizon ringtones </a><a href=" http://xshorturl.info/s4/free-real-ringtones.html "> free real ringtones </a><a href=" http://xshorturl.info/s4/real-ringtones.html "> real ringtones </a><a href=" http://xshorturl.info/s4/mosquito-ringtones.html "> mosquito ringtones </a><a href=" http://xshorturl.info/s4/free-ringtones-download.html "> free ringtones download </a>[url=http://xshorturl.info/s4/free-real-ringtones.html]free real ringtones[/url][url=http://xshorturl.info/s4/real-ringtones.html]real ringtones[/url][url=http://xshorturl.info/s4/mosquito-ringtones.html]mosquito ringtones[/url][url=http://xshorturl.info/s4/free-ringtones-download.html]free ringtones download[/url]

lindiwk - lindiwk (2007年04月23日 07時19分54秒)

<a href=" http://xshorturl.info/s3/line-of-credit.html "> line of credit </a>

{{comment multi|w}}

tawk and excel automation - trexx (2006年07月16日 02時57分07秒)

tawk で Excel のシートを読み書きすることはできますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/200ac1ec0923281a/9444b294c5027dc4?hl=ja#9444b294c5027dc4


Re: - Andrew Poelstra (2006年07月16日 02時57分36秒)

どのファイルですか? (.xls, .ods, etc)

Re: - trexx (2006年07月16日 02時57分56秒)

xls です。

Re: - William James (2006年07月16日 02時58分38秒)

Ruby だと以下のようにしてできます。

require 'win32ole'

excel = WIN32OLE.new( 'excel.application' )

excel.visible = true

workbook = excel.Workbooks.Add(1)

worksheet = workbook.Worksheets( 'Sheet1' )

excel.ole_get_methods.each{|x| p x}
puts excel.ole_method_help("Columns")

worksheet.Cells( 1, 1 )[ 'Value' ] = "Hello!"

(1..10).each {|row|
  (1..10).each {|column|
    worksheet.Cells( row, column )[ 'Value' ] = row * column
  }
}

Re: - Harlan Grove (2006年07月16日 03時00分08秒)

Win32OLE が作れるかどうかに依存します。

{{comment multi|w}}

Can we convert a char to ascii in awk - blacky (2006年07月16日 02時49分58秒)

ASCII を CHAR にする方法はありますが、CHAR を ASCII に変更する方法はありますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/82d84a213bb0d42f/4dbf5bb93fbb20f1?hl=ja#4dbf5bb93fbb20f1


Re: - Kenny McCormack? (2006年07月16日 02時51分08秒)

awk のバージョンに依存しますが、gawk ならできます。tawk は組み込み関数としてできます。

Re: - Andrew Schorr (2006年07月16日 02時52分01秒)

xgawk であれば簡単にできます。

bash-3.00$ xgawk -lordchr 'BEGIN {x = "A"; print ord(x); print
chr(ord(x))}'
65
A

Re: - Chris F.A. Johnson (2006年07月16日 02時53分17秒)

shell を使ってもいいのであれば、

awk -v SQ="'" '{
  cmd="printf \"%d\\n\" \"" SQ $1 "\""
  system( cmd )
}'

とすれば、shell で

printf "%s\n" "'$CHAR"

が実行されます。

Re: - John DuBois? (2006年07月16日 02時55分02秒)

function asc(c,
        tchar, ascval, b) {
    if (c == "")
        return ""
    c = substr(c, 1, 1)
    ascval = b = 128
    while ((tchar = sprintf("%c", ascval)) != c)
        ascval += (b /= 2) * (tchar < c) ? 1 : -1
    return int(ascval)
}

のようにしてできます。

formatting a file with columnar values into matrix - Vidhya (2006年07月16日 02時25分57秒)

P3
# CREATOR: The GIMP's PNM Filter Version 1.0
2048 1536
255
255
255
255
255
255
255
255
255
.
.
.
.
.

というファイルがあり、2048 * 1536 の情報がありますが、これを 2048 * 1536 の行列に変更したいのです。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/347d60495a492992/39c5a82565a4b40e?hl=ja#39c5a82565a4b40e


Re: - Juergen Kahrs (2006年07月16日 02時26分37秒)

これを使った方がよいのではないでしょうか?

Re: - Juergen Kahrs (2006年07月16日 02時28分05秒)

もしくは以下のスクリプトでできます。

{ printf("%d ", $1) }
((NR - offset) % 2048) == 0 {print ""}

{{comment multi|w}}

changing specific commented lines from java code ... - hector03 (2006年07月16日 02時21分03秒)

//      public final static String res_data = "resources/data/";

        public final static String datadir = (res_data==null) ?
"resources" + File.separator + "data" + File.separator : res_data +
File.separator;
//      public final static String datadir = "resources/data/";

という java のコードを

//    public static String res_data =
ResourceManager.getResourcePath("pathway.nlp:data");
      public final static String res_data = "resources/data/";

//        public final static String datadir = (res_data==null) ?
"resources" + File.separator + "data" + File.separator : res_data +
File.separator;
      public final static String datadir = "resources/data/";

のようにする awk スクリプトはどう書けばいいのでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/fb4b03070f7982ea/0a6f2586540621a3?hl=ja#0a6f2586540621a3


Re: - hector03 (2006年07月16日 02時22分57秒)

/public static String res_data/ {print"//" $0;next}
/public final static String res_data/ {sub("//","",$0);print $0;next}
/public final static String datadir = \(res_data==null\)/ {print "//"
$0; next}
/public final static String datadir = \"resources\/data\/\"/
{sub("//","",$0);print $0;next}
{print $0}

というものでやっていましたが、もっと小さなスクリプトでお願いします。

Re: - Ed Morton (2006年07月16日 02時23分36秒)

awk '{sub("//","@@")}!/@@/{printf("//")}{sub("@@","")}1' file

というのではどうですか?

{{comment multi|w}}

Dir Files and size - bshah (2006年07月09日 23時00分45秒)

200601/01
200601/02
..
200601/31

といった日付形式を持つディレクトリを再帰的に調べて、

DIR                 # Files         Size
200601/01        1000           20GB
200601/02         1200          18GB
....

のように表示するにはどうすればいいでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/4eca6551e666f793/eefd87036cd538bc?hl=ja#eefd87036cd538bc


Re: - Vassilis (2006年07月09日 23時02分01秒)

awk ではないですが、以下のようにできます。

for i in main_dir/*
do
    if [ ! -d "$i" ] then
        continue
    fi
    printf "%s\t%d\t%s\n" "$i" `ls "$i" | wc -l "` `du -h "$i"`
done

Re: - Vassilis (2006年07月09日 23時03分09秒)

for i in main_dir/[1-9]*

というところを

if [ ! -d "$i" ] ; then

としてみてください。

Re: - Vassilis (2006年07月09日 23時03分59秒)

printf "%s\t%d\t%s\n" "$i" `ls "$i" | wc -l` `du -h "$i"`

の表記ミスです。

Re: - John DuBois? (2006年07月09日 23時07分00秒)

求めているものは以下にあります。

$ jdu -H -o'%-16n %10i     %uB'

Name                  Files     Usage
./img/2001/01/01         65     1.37MB
./img/2001/01/02         72     1.62MB

となります。

補足 - さいとう (2006年07月09日 23時07分46秒)

jdu のスクリプトの長さに愕然。(w

{{comment multi|w}}

any buitin time function mawk? - Timoteo (2006年07月09日 22時49分06秒)

mawk で時間関数を使うには?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/ed7c78e772f8977c/89defd26ac473f76?hl=ja#89defd26ac473f76


Re: - Harlan Grove (2006年07月09日 22時50分07秒)

mawk のソースコードを触るか、外部からのパイプで使うかしかありません。

Re: - John DuBois? (2006年07月09日 22時50分57秒)

srand() が現在の時刻を返すことから利用することができます。

補足 - さいとう (2006年07月09日 22時56分08秒)

John DuBois? の方法は「AWK を 256 倍使うための本」の中に出ています。ソースコードは以下の URL から現在も入手可能です。(ありがたや)

以下のようなソースとなっていますが、srand() が現在の時間を返しているというのはコンパイルした環境に依存しますので、全ての mawk で使えるわけではありません。

# GETDATE (Get today)
func GetDate(val,		leap) {
	if("" == _MonName[1]) {
		_TimeZone = 9 * 3600
		split("Sun Mon Tue Wed Thu Fri Sat", _WeekName, " ")
		split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", 
                      _MonName, " ")
		split("31 28 31 30 31 30 31 31 30 31 30 31 31 29 31 30 31 30 31 31 30 31 30 31", _MonLen, " ")
	}

	if(0 == val + 0) {
		srand()
		Time = srand() + _TimeZone
	} else {
		Time = val
	}

	Sec  = Time % 60
	Min  = int(Time / 60  ) % 60
	Hour = int(Time / 3600) % 24
	Day  = int(Time / (3600 * 24))
	Week = (Day + 4) % 7 + 1
	Year = 1970;
	for(++Day;;) {
		leap = ((Year%4)==0 && (Year%100)!=0 || (Year%400)==0) ? 12: 0
		yd   = (leap) ? 366: 365
		if(Day < yd)
			break
		++Year
		Day -= yd
	}
	for(Mon = 1; _MonLen[Mon+leap]+0 <= Day+0; ++Mon) {
		Day -= _MonLen[Mon+leap];
	}
	return sprintf("%.3s %.3s%3d %02d:%02d:%02d JST %d",
		_WeekName[Week], _MonName[Mon], Day,
		Hour, Min, Sec, Year)
}

{{comment multi|w}}

Closing process on other side of pipe - ram (2006年07月09日 22時41分59秒)

$ tail -f <file name> | <my_awk_script>

というものを実行して、awk スクリプトから exit を実行しても tail -f が実行されたままになってしまいます。

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/a8b5846bd4abc2fa/fb3229129829828c?hl=ja#fb3229129829828c


Re: - dfeustel (2006年07月09日 22時42分24秒)

ctrl + c でダメですか?

{{comment multi|w}}

Print all but the filename - Jeff Kloek (2006年07月01日 23時40分00秒)

ファイル名を取り除いて、ディレクトリ名だけにする方法はありますか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/e5f62f42bd875519/e299f191efe0f13f?hl=ja#e299f191efe0f13f


Re: - Ted Davis (2006年07月01日 23時40分44秒)

OS が分からないと、やり方が異なりますので、答えられません。

Re: - Jeff Kloek (2006年07月01日 23時41分58秒)

AIX です。

"ls -Rl" の結果を処理したいのです。

Re: - Cesar Rabak (2006年07月01日 23時42分32秒)

$ls -Rl | awk '/^d/'

で処理できます。

Re: - Jon LaBadie? (2006年07月01日 23時44分13秒)

ファイル名が $9 であるとすれば、以下のようにします。

ls -lR |
awk '
{ for(n=9; n<= NF; n++
      $n = ""
   print
}'

Re: - Jeff Kloek (2006年07月01日 23時45分16秒)

"ls -Rl" の結果ではなく find の結果でした。

Re: - Chris F.A. Johnson (2006年07月01日 23時45分46秒)

find . -type d -print

でできます。

Re: - Jeff Kloek (2006年07月01日 23時47分37秒)

/share/doc/freetype-2.0.1/docs/glyphs/glyphs-7.html
/share/doc/freetype-2.0.1/docs/glyphs/grid_1.png
/share/doc/freetype-2.0.1/docs/glyphs/index.html
/share/doc/freetype-2.0.1/docs/glyphs/points_conic.png
/share/doc/freetype-2.0.1/docs/glyphs/points_conic2.png
/share/doc/freetype-2.0.1/docs/glyphs/points_cubic.png
/share/doc/freetype-2.0.1/docs/glyphs/points_segment.png
/share/doc/freetype-2.0.1/docs/glyphs/twlewis1.png
/share/doc/freetype-2.0.1/docs/glyphs/twlewis2.png
/share/doc/freetype-2.0.1/docs/glyphs/up_flow.png
/share/doc/freetype-2.0.1/docs/image
/share/doc/freetype-2.0.1/docs/image/freetype.jpg
/share/doc/freetype-2.0.1/docs/tutorial

の個々のディレクトリ名が欲しいのです。

Re: - Jon LaBadie? (2006年07月01日 23時48分29秒)

OT ですが、

sed -e 's/\/[^/]*$//'

のようにしてみてください。

Re: - William James (2006年07月01日 23時49分59秒)

以下のようにしてできます。

awk '{sub( "/[^/]*$" , x )}8'

Re: - Ed Morton (2006年07月01日 23時52分31秒)

いくつでも生成してよいなら以下のようにします。

$ awk 'sub(/\/[^/]*$/,"")' file
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs/glyphs

ユニークなものだけでよいなら、

$ awk 'sub(/\/[^/]*$/,"")&&!f[$0]++' file
/share/doc/freetype-2.0.1/docs/glyphs
/share/doc/freetype-2.0.1/docs
/share/doc/freetype-2.0.1/docs/image

のようにします。

Re: - Bob Harris (2006年07月01日 23時53分26秒)

以下のもので良いのではないでしょうか?

find . -print | awk -F/ -v OFS=/ '{$NF="";print}'

Re: - Jeff Kloek (2006年07月01日 23時55分18秒)

以下のものでうまく動作しました。

rev file1 |cut -d'/'  f2  |rev >file2

Re: - Chris F.A. Johnson (2006年07月01日 23時56分59秒)

どういうものが欲しいのかを提示してくれなければ、何も分かりませんよ。

それに、これは UNIX の標準コマンドではないです。

{{comment multi|w}}


Re: - さいとう (2006年07月02日 00時06分07秒)

え〜っと、「なんじゃこりゃ」というのは置いておいて、

rev file1 |cut -d'/'  f2  |rev >file2

ではなく、

rev file1 |cut -d/  -f2  |rev >file2

だと思われるのですが、これだとファイル名しか出ませんし、普通使わないと思うのですけどね。

AIX が Linux と比べて変わっている (正確には逆で Linux が変わっている) からでしょうかね。

tawk for unix? - thecodemachine (2006年07月01日 23時37分41秒)

tawk の UNIX 版に関する投稿を見ますが、Thompson の Web サイトで見つけることができません。

どこかで入手可能ですか?

http://groups.google.co.jp/group/comp.lang.awk/browse_frm/thread/54fe64db6de6c09a/0504a27bb4b282e1?hl=ja#0504a27bb4b282e1


{{comment multi|w}}

xgawk: fatal: extension: cannot find dynamic library `xml' - poulteki (2006年06月25日 23時34分24秒)

$ xgawk -l xml -f parse.awk SCHED.xml
xgawk: fatal: extension: cannot find dynamic library `xml'

のようにエラーになります。

どうすればいいでしょうか?

http://groups.google.co.jp/group/comp.lang.awk/browse_thread/thread/8935003decab7d9e/fab5e9325cd2d370?hl=ja#fab5e9325cd2d370


Re: - Jurgen Kahrs (2006年06月25日 23時37分49秒)

このメッセージはきちんとインストールされていない場合に発生します。以下のいずれかの方法で解決できます。

  • コマンドラインを以下のように変更します。
./gawk -l extension/.libs/libxml.so.0 -f parse.awk SCHED.xml
  • root で make install します。
  • root でない場合は以下のようにします。
configure --prefix=/tmp/xgawk ; make install

これでもダメなら XML パーサーがインストールされていないことになります。

Re: - poulteki (2006年07月01日 23時35分12秒)

LD_LIBRARY_PATH を /usr/local/lib に変更したら動きました。

{{comment multi|w}}

joining all lines - saylee (2006年06月25日 01時04分36秒)

全ての行を 1 行にして、";" で複数行に分割したいのです。

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


Re: - Xicheng Jia (2006年06月25日 01時05分29秒)

shellutils でやった方が楽です。

tr -s "\n" " " < myfile.txt | sed 's/;\s*/;\n/g'

Re: - quarkLore (2006年06月25日 01時06分45秒)

awk 'BEGIN {RS=";"}//
{gsub("\n","");printf("[%s]\n",$0);}' <file_name>

のようにしてできます。

Re: - Loki Harfagr (2006年06月25日 01時07分46秒)

これこそ awk が最適です。

gawk -v RS=';' -v FS='\n' '$1=$1' yourfile.txt

Re: - Chris F.A. Johnson (2006年06月25日 01時08分30秒)

awk -v RS=';' -v FS='\n' '$1=$1 {printf "%s;\n", $0}' yourfile.txt

のようにしてもできます。

Re: - William Park (2006年06月25日 23時33分16秒)

以下のような一行野郎でもできます。

tr '\n;' ' \n'

Re: - Steffen Schuler (2006年07月03日 00時17分08秒)

変な挙動が見られます。

schuler@paulus:bin$ echo -e "1;2\n3;\n4\n" | gawk -v RS=';' -v FS='\n'
'$1=$1'
1
2 3
schuler@paulus:bin$ echo -e "1;2\n3;\n4\n" | gawk -v RS=';' '$1=$1'
1
2 3
4
schuler@paulus:bin$ gawk --version
GNU Awk 3.1.4

これはバグですか? 仕様ですか?

{{comment multi|w}}

printing records containing a pattern - saylee (2006年06月25日 00時59分25秒)

"xyz" を含んだレコードのある全ての行を使います。

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

のようにしましたが、1 行に複数回ある場合には複数回プリントされます。

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


Re: - Ed Morton (2006年06月25日 01時01分08秒)

awk '{fs=""; for (i=1;i<=NF;i++) if ($i ~ /xyz/){printf "%s%s",fs,$i;fs=FS} print "" }'

または

awk '
{fs=out="";for (i=1;i<=NF;i++) if ($i ~ /xyz/){out = out fs $i; fs=FS}}
out {print out}'

のようにします。あとは、マッチしなかった場合にどういう処理にするか次第です。

Re: - Xicheng Jia (2006年06月25日 01時02分19秒)

Perl じゃダメですか?

perl -lpe 's/.*?(\S*xyz\S*)|.*?/$1\t/g' myfile.txt

Re: - William Park (2006年06月25日 23時31分05秒)

以下のようにしてできます。

while read -A; do
   echo "${*|/xyz}"
done < file

Re: - William James (2006年06月25日 23時31分40秒)

以下のようにしてできます。

{for(i=1;i<=NF;i++)if($i!~/xyz/)$i=x;$0=$0;$1=$1}$0

Re: - Jon LaBadie? (2006年06月27日 00時59分56秒)

以下のようにしてできます。

awk '
# records that contain the pattern
 xyz  {
     n = 0
     for (i=1; i <= NF; i++)
         if ($i ~ /xyz/)
             printf("%s%s", ++n>1 ? OFS : "", $i)
     print ""
     next
}
# records that do not contain the pattern
# { print }
'

Re: - Xicheng Jia (2006年06月27日 01時00分27秒)

Perl だと以下のようになります。

perl -lne 'if(/xyz/) { @x = /\S*xyz\S*/g; print "@x" }' myfile.txt

Re: - William James (2006年06月27日 01時05分03秒)

Ruby なら以下のようにしてできます。

ruby -ane 'puts $F.grep(/xyz/).join(" ") if /xyz/'

これ、なかなか面白いです。(さいとう)

{{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秒