awkについて語るスレ $2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/02/23(金) 23:55:42三人の碩学が生み出したスクリプト言語AWKについて語るスレ
◆ 前スレ
awkについて語るスレ
http://pc10.2ch.net/test/read.cgi/tech/1023556171/
◆ 関係スレ
シェルスクリプト相談室
http://pc10.2ch.net/test/read.cgi/tech/1112553783/
AWKでCGI
http://pc10.2ch.net/test/read.cgi/php/1171804314/
【sed】シェルスクリプト総合@LINUX Part2【awk】
http://pc10.2ch.net/test/read.cgi/linux/1154578200/
◆ 参考
The AWK Programming Language (Brian Kernighan):
ttp://cm.bell-labs.com/cm/cs/awkbook/index.html
GAWK (GNU Projedt):
ttp://www.gnu.org/software/gawk/
0267デフォルトの名無しさん
2009/05/19(火) 23:16:20さくっと1行で済むのが気に入ってる俺には無用だな
0268デフォルトの名無しさん
2009/06/01(月) 15:22:34Jア(オ)ーク、プラグアウッ!
0269デフォルトの名無しさん
2009/06/08(月) 01:31:39Geocoding - 住所から緯度経度を検索 だって。何これおもろい。
0270デフォルトの名無しさん
2009/06/21(日) 16:39:12を実行すると$1が1桁の数字のときにうまくいかないんですけどなぜ?
0271デフォルトの名無しさん
2009/06/21(日) 19:43:04miso<$1-0
でやったらどう?
0272デフォルトの名無しさん
2009/06/21(日) 21:34:56ありがとうございます。でもだめでした。
文字列で比較されてるっぽいですね。
0273デフォルトの名無しさん
2009/06/21(日) 22:04:19何を入力したときに何が出て欲しいの?
うまくいかないってどうなるの?
0274デフォルトの名無しさん
2009/06/21(日) 22:23:40$1が4のときに出てほしくないのに出てしまうんです...
0275デフォルトの名無しさん
2009/06/21(日) 22:31:41こんなん?
BEGIN{miso=30}{if(miso<$1){printf("%d\n",$1)}}
0276デフォルトの名無しさん
2009/06/21(日) 22:46:46出てしまう理由が気になります...なんででしょう
やっぱり271さんの言うとおり文字列比較してるんでしょうか?
0277デフォルトの名無しさん
2009/06/21(日) 22:54:47awk のバージョン(種別)が分からない
何を食わせてるのか分からない
スクリプトは一行で書いてるのかファイルにしてるのか分からない
一行で書いているならシェルに何を使っているのか
0278デフォルトの名無しさん
2009/06/22(月) 00:38:26二桁のときだけ上手くいくという感じなのかね。
WindowsXPのコマンドプロンプトでgawk(3.1.5)使って下記を試してみたけど
その現象再現できなかった。
gawk "{if(miso<$1){printf($1)}}" miso=30
0279デフォルトの名無しさん
2009/06/22(月) 07:43:07mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
$seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
うまく動いているようだが。
0280デフォルトの名無しさん
2009/06/22(月) 18:20:09$ awk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
$ seq 1 40 | awk '{if(miso<$1)printf($1)}' miso=30
31323334353637383940
0281デフォルトの名無しさん
2009/06/22(月) 19:59:100282270 のが再現できない...
2009/06/23(火) 01:02:55コマンドラインで指定されたファイル名が var=val という形式ならば、それは変数への代入であると解釈されます。変数 var は値 val に設定されます (これは、すべての BEGIN ブロックを実行したあとに行われます)。
やっぱりもれの XPコマンドプロンプト環境でも
>gawk -W version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.
>seq 1 40 | gawk "{if(miso<$1) print}" miso=30
31
32
33
34
35
36
37
38
39
40
って期待通りの動きだYO!
0283デフォルトの名無しさん
2009/06/24(水) 00:39:07他のソフトで「改行ありの固定長」にしてから、awkで処理していたのですが…
データファイルによく出てくる文字をとりあえずRSに見立てて読み込み
→RSに指定した文字を連接
→固定長の1行分より長かったらその部分を切り出し
していくと「改行ありの固定長」、できちゃいました。
RSに指定した文字がしばらく出てこなければ変数パンクしちゃうし、大分危なっかしいの
ですが、とりあえずawkでできたのが少しうれしい。
0284デフォルトの名無しさん
2009/06/24(水) 03:25:12substr($0, start, length) でばらせよw
0285デフォルトの名無しさん
2009/06/26(金) 11:29:46>284みたいな読解力ない馬鹿が湧かないように、判り易く書きましょう。
つーか、具体的なコードも出さずに「awkでできてうれしい」なんてのはチラシの裏にどうぞ。
0286デフォルトの名無しさん
2009/06/30(火) 01:27:460287デフォルトの名無しさん
2009/07/13(月) 09:52:52例)
10進 2進 8進
000 000 000
001 001 001
002 010 002
003 011 003
↓↓↓↓↓↓↓
<table>
<tr><th>10進</th> <th>2進</th> <th>8進</th></tr>
<tr><td>000</td> <td>000</td> <td>000</td></tr>
<tr><td>001</td> <td>001</td> <td>001</td></tr>
<tr><td>002</td> <td>010</td> <td>002</td></tr>
<tr><td>003</td> <td>011</td> <td>003</td></tr>
</table>
0288デフォルトの名無しさん
2009/07/13(月) 12:07:49正規表現を使うほどのことではない
コアの部分だけ書くとこれだけ
for(i=1;i<=NF;i++) printf("<td>%s</td>", $i)
0289デフォルトの名無しさん
2009/07/13(月) 16:12:210290hogehoge
2009/07/17(金) 16:37:34なんでだ!
仕様書読み飛ばしててデータ欠落させるところだった(´・ω・`)
>>287
sed でええやん
0291デフォルトの名無しさん
2009/07/17(金) 18:35:54http://www.eecs.harvard.edu/cs152/lectures/CS152-Lecture_14-Kernighan.pdf
0292デフォルトの名無しさん
2009/07/26(日) 15:10:31ここのgawkで>>17のサンプルを試したが動かなかった。
gawk: test.awk:4: 致命的: 入出力用の双方向ソケット `/inet/tcp/0/www.yahoo.com/80' が開けません (No such file or directory)。
0293hogehoge
2009/07/27(月) 11:13:150294デフォルトの名無しさん
2009/07/28(火) 00:11:420295デフォルトの名無しさん
2009/07/30(木) 11:45:580296デフォルトの名無しさん
2009/08/06(木) 10:22:377月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月3日]]
12月16日→[[12月16日|12月16日]]
と置き換えたいです。
perlならわりと簡単なのですが、awkで簡単にいきますか?
自分がawkのことを勉強不足だからかもしれませんけど…。
0297デフォルトの名無しさん
2009/08/06(木) 10:24:137月7日→[[7月7日|07月07日]]
7月28日→[[7月28日|07月28日]]
11月3日→[[11月3日|11月03日]]
12月16日→[[12月16日|12月16日]]
0298デフォルトの名無しさん
2009/08/06(木) 11:03:170299デフォルトの名無しさん
2009/08/06(木) 11:13:12gsub(/月|日/," ");
printf("%02d月%02d日\n",$1,$2);
}
とか.
フィールドセパレータがデフォルト(半角スペース)の場合ね.
0300デフォルトの名無しさん
2009/08/06(木) 11:15:10Perlで簡単に書けるなら、一旦Perlコード晒してくれるか?
どうも仕様がよく解らんのだ…
0301デフォルトの名無しさん
2009/08/06(木) 11:54:28$1))
我ながら汚ねぇなぁ(´・ω・`)
>>299の方がいいな
0302デフォルトの名無しさん
2009/08/06(木) 12:27:22#!/usr/bin/perl
while(1){
$line = <STDIN>;
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/){
$month = $1; $day = $2;
if($month >= 10) {
if($day >=10){
print "$& -> [[$month月$day日]]";
}
else {
print "$& -> [[$month月$day日|$month月0$day]]";
}
}
else{
if($day >=10){
print "$& -> [[$month月$day日|0$month月$day]]";
}
else{
print "$& -> [[$month月$day日|0$month月0$day]]";
}
}
}
}
1月1日 - ユーロ導入10周年。
1月1日 -> [[1月1日|01月01]]
12月31日 - ニューヨークのマンハッタン橋開通100周年。
12月31日 -> [[12月31日]]
8月21日 - ハワイ州州制50周年。
8月21日 -> [[8月21日|08月21]]
10月1日 - パラオ独立15周年。
10月1日 -> [[10月1日|10月01]]
0303デフォルトの名無しさん
2009/08/06(木) 14:16:23ちなみに、そのコードじゃ無限ループするぞ。
#!/usr/bin/perl
while($line = <STDIN>) {
if($line =~ /(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日/) {
$month = $1; $day = $2;
if($month < 10 || $day < 10) {
printf "%s -> [[%d月%d日|%02d月%02d]]\n", $&, $month, $day, $month, $day;
}
else {
print "$& -> [[$month月$day日]]\n";
}
}
}
0304デフォルトの名無しさん
2009/08/06(木) 14:44:030305デフォルトの名無しさん
2009/08/06(木) 14:47:14という文字列を
[[7月7日|07月07日]]
と置き換える、ってことでしょ。
なんで分からんかなぁ。そっちのが分からん。
0306デフォルトの名無しさん
2009/08/06(木) 14:53:30出力は[[07月07日|07月07日]]になるよね?これはOK?
そもそも,そういう入力は起こりえないの?
そんな感じです。
目的を言っていないので、何がやりたいのかよくわからないのだと思います。
早い話、Wikiの記法を使ってリンクを張りたいのです。
0をくわえて桁を調整している理由は
文字列としてソートして正しく昇順に並ぶようにするためです。例えばWikipediaなら
7月7日のときは、[[7月7日|07月07日]]とすることで
リンクはhttp://ja.wikipedia.org/wiki/7月7日
表示される文字列は 07月07日
となります。
これをソートできるテーブルの要素にします。参考までに
http://ja.wikipedia.org/wiki/Help:%E8%A1%A8%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9#.E5.86.8D.E6.95.B4.E5.88.97.E5.8F.AF.E8.83.BD.E3.81.AA.E8.A1.A8
この処理はawkでも可能なことは可能だったんですが、無知なせいか
おそろしく不格好になりました。
>>306
それ思いました。できれば
07月07日->[[7月7日|07月07日]]
のように処理したいです。
0308デフォルトの名無しさん
2009/08/06(木) 18:26:07それです。そういう意味です。
0309デフォルトの名無しさん
2009/08/06(木) 21:17:06# 一行に複数回現れた場合は無視.
BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", $0, a[2], a[1], a[2], a[1]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", $0, a[2], a[1]));
}
}
print $0;
}
0310309
2009/08/06(木) 21:21:15BEGIN {
F = "(0?[1-9]|1[0-2])月(0?[1-9]|[1-2][0-9]|3[01])日";
}
{
if ($0 ~ F) {
match($0, F, a);
if (a[1]+0 < 10 || a[2]+0 < 10) {
sub(a[0], sprintf("[[%d月%d日|%02d月%02d日]]", a[1], a[2], a[1], a[2]));
} else {
sub(a[0], sprintf("[[%d月%d日]]", a[1], a[2]));
}
}
print $0;
}
0311デフォルトの名無しさん
2009/08/06(木) 23:59:03$ cat test.txt
1月1日 #m月d日
01月1日 #0m月d日
1月01日 #m月0d日
01月01日 #0m月0d日
2月10日 #m月dd日
02月10日 #0m月dd日
11月3日 #mm月d日
11月03日 #mm月0d日
12月16日 #mm月dd日
$ awk -f test.awk test.txt
[[1月1日|01月01日]] #m月d日
[[1月1日|01月01日]] #0m月d日
[[1月1日|01月01日]] #m月0d日
[[1月1日|01月01日]] #0m月0d日
[[2月10日|02月10日]] #m月dd日
[[2月10日|02月10日]] #0m月dd日
[[11月3日|11月03日]] #mm月d日
[[11月3日|11月03日]] #mm月0d日
[[12月16日]] #mm月dd日
0312デフォルトの名無しさん
2009/08/07(金) 06:34:470313デフォルトの名無しさん
2009/08/07(金) 11:45:35> perlならわりと簡単なのですが、awkで簡単にいきますか?
って言ってるんだから、「いきます」って答えりゃいいんだよな
0314デフォルトの名無しさん
2009/08/07(金) 11:46:39なにその死の行進こわい
0315デフォルトの名無しさん
2009/08/15(土) 11:36:300316デフォルトの名無しさん
2009/08/16(日) 09:46:093.1.7ベースのWindows用バイナリ、出ました。
ttp://www.kt.rim.or.jp/%7Ekbk/gawk-3.1/index.html#GAWK-DOWNLOAD
名言集 その3
『いつもサボってばかりのキャップがウゼえ』
http://yutori7.2ch.net/test/read.cgi/news4vip/1249830540/ ID:PVAf+dux0 = 自動焼人 ★
> 71 :以下、名無しにかわりましてVIPがお送りします [sage] :2009/08/10(月) 00:58:57.28 ID:PVAf+dux0
> >>69
> 大変って言うか
> 毎日、報告されたのを見て、判断して、処理して、完了報告して、以下ループ。
> ちょっとでもミスすると、普段は作業もしてないキャップさんたちがさんざん文句言ってきて
> その言いわけを考えないと、キャップはく奪されたりアカウント凍結されたりするから
>
> 登録されてから一年以上経って、やっといいたいこと言えるようになってきたよ。
----------------------------------------------
この自動焼人 ★メールマガジンの配信停止をご希望される方は
http://qb5.2ch.net/test/read.cgi/sec2chd/1250169591/
にて自動焼人 ★までご連絡ください
0318デフォルトの名無しさん
2009/10/24(土) 17:23:040319デフォルトの名無しさん
2009/10/24(土) 18:19:03処理対象がファイルなら、事前にwc -lか何かで行数調べて awk に渡してみては
0320デフォルトの名無しさん
2009/10/24(土) 18:52:07ちょっと考えながらやってみます
0321デフォルトの名無しさん
2009/10/24(土) 19:15:52BEGIN {
SKIPTAILS = 10
}
{
line = buf[1]
for(i=1;i<SKIPTAILS;i++) buf[i] = buf[i+1]
buf[SKIPTAILS] = $0
}
NR > SKIPTAILS {
# lineを処理
}
0322デフォルトの名無しさん
2009/10/24(土) 22:11:41リングバッファで処理するようにしてみた。
BEGIN {
SKIPTAILS = 10
ringpos = SKIPTAILS
}
{
ringpos = (ringpos + 1) % SKIPTAILS
line = buf[ringpos]
buf[ringpos] = $0
}
NR > SKIPTAILS {
# lineを処理
}
0323デフォルトの名無しさん
2009/10/24(土) 23:18:06リングバッファ、勉強になりました
使わせて頂きます
0324デフォルトの名無しさん
2009/11/19(木) 20:22:22sed awk して船山に登る だろ?
0325デフォルトの名無しさん
2009/11/23(月) 12:06:14gawkで
{
printf("%d,%s\n", NR, $0 ) > FILENAME;
}
という行頭に番号を振って保存する処理をして
batファイルで一括処理させようとしたんですが
c:\windows\gawk\gawk -f g:\作業用\n.awk g:\作業用\*.txt
実行結果が
ファイル1 ファイル2
1A 4D
2B 5E
3C 6F
になります
ファイル2も
1D
2E
3F
にするにはどうしたらよいでしょうか?
0326デフォルトの名無しさん
2009/11/23(月) 12:27:220327デフォルトの名無しさん
2009/11/23(月) 12:35:21おお、出来た!
迅速な回答ありがとうございます
0328デフォルトの名無しさん
2009/12/21(月) 13:53:34あれ、vaioのOSがWindows7 64bitバージョンに・・・
ダメじゃん!gawkが使えなくなってしまう・・・
うーん、、、またXPを買うべきか・・・悩む・・・
0329デフォルトの名無しさん
2009/12/21(月) 14:21:01自分でコンパイルし直せばいいだけじゃないの?
0330デフォルトの名無しさん
2010/01/14(木) 03:52:20ttp://slashdot.jp/developers/article.pl?sid=10/01/06/0345207
多分必要性を感じない程度には使ってるから、買わないけど嬉しい。
布教用に買うってのもちょっとな。
0331デフォルトの名無しさん
2010/02/28(日) 11:08:56awk新参です。
-O(オプション)を検索し、
-Oとそれ以降をリダイレクトしたいのですが…
良い方法、ありますでしょうか
0332デフォルトの名無しさん
2010/02/28(日) 15:36:31その AAA で始まる文字列も一体どういうものなの。
コマンドライン引数なのか、ファイルから読み込んでくるのとか。
用語と状況はきちんと書いてくれ。
0333デフォルトの名無しさん
2010/02/28(日) 16:19:07AAA BBB CCC … -O ZZZ YYY XXX 0…
AAA BBB CCC … -O ZZZ YYY XXX 1…
AAA BBB CCC … -O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>type 331.awk
{match($0, " -O .*", a);
print a[0];}
D:\My Documents\gawk\331>gawk -f 331.awk 331.txt >a.txt
D:\My Documents\gawk\331>type a.txt
-O ZZZ YYY XXX 0…
-O ZZZ YYY XXX 1…
-O ZZZ YYY XXX 2…
D:\My Documents\gawk\331>
0334331
2010/02/28(日) 18:43:32>>332すみません。書き直します。
AAA BBB CCC … -O ZZZ YYY XXX …
と書複数行書かれたファイルがあり、
「-O」以降の文字列を別ファイルに保存する
ってことをしたかったのです。
>>333
エスパーな文だったのにありがとうございます。
想定してたのはそんな感じです。
ただ以下のエラーが出て上手くいきません…
gawk: 331.awk:2: fatal: match() cannot have 3 arguments
match使ってるのにaという3つ目の引数を使ってるから…ってことでしょうか…?
0335デフォルトの名無しさん
2010/02/28(日) 19:00:04A: Your AWK is too old to recreate the Makefile. The build is done based on the distributed Makefile. Everything shall compile successfully though.
So if the compile succeeds just ignore such errors, please.
0336335
2010/02/28(日) 19:22:380338デフォルトの名無しさん
2010/02/28(日) 22:25:50おっと一言オウかったか。
0339デフォルトの名無しさん
2010/03/04(木) 15:04:38gsub(str1,str2)みたいに。
0340デフォルトの名無しさん
2010/03/04(木) 21:44:52man gawkより
gsub(r, s [, t])
For each substring matching the regular expression r in the string t,
substitute the string s, and return the number of substitutions.
If t is not supplied, use $0. An & in the replacement text is
replaced with the text that was actually matched. Use \& to get a
literal &. (This must be typed as "\\&"; see GAWK: Effective AWK
Programming for a fuller discussion of the rules for &'s and
backslashes in the replacement text of sub(), gsub(), and gen sub().)
0341デフォルトの名無しさん
2010/03/08(月) 21:36:03何が難しいのかよくわからん。
0342デフォルトの名無しさん
2010/03/17(水) 22:07:37実際のところ速くなるんでしょうか?
私の環境ではforループや加算などはawkのほうが速そうですが、
どのような処理の場合にperlのほうが速くなりますか?
$ time mawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};printf("%f\n" ,x)}'
500000500000.000000
real 0m0.131s
user 0m0.120s
sys 0m0.000s
$ time gawk 'BEGIN{x=0;for(i=1;i<=1000000;i++){x=x+i};print x}'
500000500000
real 0m0.289s
user 0m0.284s
sys 0m0.000s
$ time perl -e '$x=0;for($i=1;$i<=1000000;$i++){$x=$x+$i};print $x'
500000500000
real 0m0.379s
user 0m0.376s
sys 0m0.004s
0343デフォルトの名無しさん
2010/03/17(水) 22:26:14「awkだと遅いのでperlに書き換えるという人」 に聞けば分かる
0344デフォルトの名無しさん
2010/03/19(金) 09:08:06遅いというawkはgawkなの?
素のawkよりgawkの方が早くなかったっけ?
0345デフォルトの名無しさん
2010/03/20(土) 01:03:01(とCとC++とJAVA)の比較があるな
今のマシン使って書き換えなきゃならないほど遅いって
どんな処理なんだろう?
0346デフォルトの名無しさん
2010/03/21(日) 13:44:10awk 等を組み合わせて実行するとプロセス起動のコストがかかるので perl で一つに纏める、という話じゃないの?
0347デフォルトの名無しさん
2010/03/22(月) 17:35:11文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
0348デフォルトの名無しさん
2010/03/22(月) 18:01:580349デフォルトの名無しさん
2010/03/22(月) 18:25:10なにをしたいのかよくわかんないんだけど。
> 文字列中の全角文字を半角文字に変える華麗な方法を模索しています。
華麗なのはtrコマンドを使う方法。ただtrがマルチバイトをうまく扱ってくれるか
どうかはこころもとない。
Perlならtrを、Rubyなら文字列クラスのtrメソッドを、
Pythonならstringモジュールのmaketrans関数と文字列のメソッドtransleteを使う、
という手がある。
awkないし(tr以外の)古典的なツールで華麗にやる方法はないと思う。
0350デフォルトの名無しさん
2010/03/24(水) 17:11:16全角半角変換は ASC()
半角全角変換は JIS()
0351デフォルトの名無しさん
2010/03/25(木) 08:34:111. EUC-JPにして(nkfとか)kakasi で、戻す
2. それだったら最初から、nkf -Z
3. gawk前提で、文字毎に処理(LANGを指定して子プロセス起動)
awkの中で閉じてやるのはめんどくさそう
0352デフォルトの名無しさん
2010/03/29(月) 23:34:27system(cmd) を使うと、アンチウィルスソフト(kaspersky)の
アプリケーション履歴にバッチファイルが登録されるのを発見。
close(cmd) しても同じ。
while(cmd|getline>0){}
で代用すると残らなくなった。??
0353デフォルトの名無しさん
2010/05/13(木) 00:22:57http://www.cnn.co.jp/world/AIC201005120004.html
テヘランで、ブルカを着て入出国する時って、顔のチェックどうするんだろう。
他人や男でもばれないの?
0354デフォルトの名無しさん
2010/05/13(木) 00:23:49誤爆スマン
0355デフォルトの名無しさん
2010/05/14(金) 13:38:240356デフォルトの名無しさん
2010/05/18(火) 10:51:40下のような出力が有った場合、例えば
lrwxrwxrwx 1 root root 70 May 18 10:37 hoge
ls -al | awk '{print$1$2$2$4$6$7$8$9}' とすれば「$5」の
「70」を抜くことが出来ますが、これが$100とかまで続く場合、
「$5」だけを抜きたい場合記述が大変になります。
何か良い方法は無いものでしょうか?
0357デフォルトの名無しさん
2010/05/18(火) 11:01:32区切りの空白が$5のあったところだけ2個になるのが気にならなければ、
ls -al | awk '{$5 = ""; print}'
とすればよい。
空白2個を修正するならこうする。
ls -al | awk '{$5 = ""; print $0}' | awk '{$1 = $1; print}'
0358デフォルトの名無しさん
2010/05/18(火) 11:03:15ls -al | awk '{$5 = ""; print}' | awk '{$1 = $1; print}'
0359デフォルトの名無しさん
2010/05/18(火) 11:07:030360デフォルトの名無しさん
2010/05/18(火) 11:34:06$1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入されるので、
空白2個だったところが空白1個になる。
0361デフォルトの名無しさん
2010/05/18(火) 11:35:04空白2個なので$0を再構成すると空白1個区切りになる
0362デフォルトの名無しさん
2010/05/18(火) 12:21:12非常に解りやすいご説明、ありがとうございます。
なるほど代入することで解決するんですね。
勉強になりました。
0363デフォルトの名無しさん
2010/05/18(火) 15:08:38$1ってFSで区切られた一つ目だよね?
なんでそれ自身を自分に代入したらスペースが消えるん?
0364デフォルトの名無しさん
2010/05/18(火) 15:27:35$0の再構成とはいったんばらした$1,$2,...をOFSを挟んで
つなげ直すってことなので、何で区切られていたかは
保存されない。
0365デフォルトの名無しさん
2010/05/18(火) 15:41:56>$1=$1で代入してやると、$1, $2, ...を空白1個でつないだものが$0に代入される
って約束事を覚えておけってことかい?
0366デフォルトの名無しさん
2010/05/18(火) 15:42:39% echo a b | gawk '{OFS="-";$1=$1;OFS="=";print}'
a=b
再構成は$1=$1をやってすぐじゃなくて、次に$0が使われるとき、ってこと
なのかな?
■ このスレッドは過去ログ倉庫に格納されています