# fi.awk # A>awk -f fi.awk 70 in_file > out_file # in_fileを読んで、1行を70文字以内にして out_file に書き出す。 # BEGIN{ if(ARGC<3) usage() # 1行の最大文字数と in_file を指定しないと終了。 a=ARGV[1] # 1行の最大文字数を a に代入する。 if(a+0 < 20) usage() # 1行の最大文字数が20未満ならば終了。 ARGV[1]="" } { i++ line[i]=$0 n=NR } END{ for(i=1;i<=n;i++){ if(i==1){ # 1行目の printf("%3s"," ") # 最初に空白を3つ。 nagasa=3 } m=split(line[i], w ," ") # 各行を単語に分解する。 if(m==0){ # 改行のみの行であれば printf("\n%3s"," ") # 最初に空白を3つ。 nagasa=3 } else for(j=1;j<=m;j++){ b=length(w[j])+1 # 各単語の長さ+空白(1) nagasa += b # 単語の長さを次々加えたものをnagasaに代入 if(nagasa-1<=a) # nagasa-1(最後の空白を除く)が a 以下なら printf("%s ", w[j]) # 単語を表示する。 else if(nagasa-1>a){ # nagasa-1 が a を超えると nagasa=length(w[j])+1 # nagasa を このようにして printf("\n%s ", w[j]) # 改行してから、単語を表示する。 } } } print } func usage(){ print "awk -f fi.awk 70 in_file" exit }