JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
マニュアルページセクション 1: ユーザーコマンド     Oracle Solaris 11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

紹介

ユーザーコマンド

acctcom(1)

adb(1)

addbib(1)

admin(1)

alias(1)

allocate(1)

amt(1)

appcert(1)

apptrace(1)

apropos(1)

ar(1)

arch(1)

as(1)

asa(1)

at(1)

atq(1)

atrm(1)

audioconvert(1)

audioctl(1)

audioplay(1)

audiorecord(1)

audiotest(1)

auths(1)

auto_ef(1)

awk(1)

banner(1)

basename(1)

basename(1B)

batch(1)

bc(1)

bdiff(1)

bfs(1)

bg(1)

biff(1B)

break(1)

builtin(1)

cal(1)

calendar(1)

case(1)

cat(1)

cd(1)

cdc(1)

cdrw(1)

chdir(1)

checkeq(1)

checknr(1)

chgrp(1)

chkey(1)

chmod(1)

chown(1)

chown(1B)

ckdate(1)

ckgid(1)

ckint(1)

ckitem(1)

ckkeywd(1)

ckpath(1)

ckrange(1)

ckstr(1)

cksum(1)

cktime(1)

ckuid(1)

ckyorn(1)

clear(1)

cmp(1)

col(1)

comb(1)

comm(1)

command(1)

compress(1)

continue(1)

cp(1)

cpio(1)

cpp(1)

cputrack(1)

crle(1)

crontab(1)

csh(1)

csplit(1)

ct(1C)

ctags(1)

ctrun(1)

ctstat(1)

ctwatch(1)

cu(1C)

cut(1)

date(1)

dc(1)

deallocate(1)

decrypt(1)

delta(1)

deroff(1)

df(1B)

dhcpinfo(1)

diff(1)

diff3(1)

diffmk(1)

digest(1)

digestp(1)

dircmp(1)

dirname(1)

dirs(1)

dis(1)

disown(1)

dispgid(1)

dispuid(1)

dos2unix(1)

dpost(1)

du(1)

du(1B)

dump(1)

dumpcs(1)

dumpkeys(1)

echo(1)

echo(1B)

ed(1)

edit(1)

egrep(1)

eject(1)

elfdump(1)

elfedit(1)

elffile(1)

elfsign(1)

elfwrap(1)

encrypt(1)

enhance(1)

env(1)

eqn(1)

errange(1)

errdate(1)

errgid(1)

errint(1)

erritem(1)

error(1)

errpath(1)

errstr(1)

errtime(1)

erruid(1)

erryorn(1)

eval(1)

ex(1)

exec(1)

exit(1)

expand(1)

export(1)

exportfs(1B)

expr(1)

expr(1B)

exstr(1)

factor(1)

false(1)

fastboot(1B)

fasthalt(1B)

fc(1)

fg(1)

fgrep(1)

file(1)

file(1B)

filebench(1)

filep(1)

filesync(1)

filofaxp(1)

find(1)

finger(1)

fmt(1)

fmtmsg(1)

fold(1)

for(1)

foreach(1)

franklinp(1)

from(1B)

ftp(1)

function(1)

gcore(1)

gencat(1)

geniconvtbl(1)

genmsg(1)

get(1)

getconf(1)

getfacl(1)

getlabel(1)

getopt(1)

getoptcvt(1)

getopts(1)

gettext(1)

gettxt(1)

getzonepath(1)

glob(1)

goto(1)

gprof(1)

grep(1)

groups(1)

groups(1B)

grpck(1B)

hash(1)

hashcheck(1)

hashmake(1)

hashstat(1)

head(1)

helpdate(1)

helpgid(1)

helpint(1)

helpitem(1)

helppath(1)

helprange(1)

helpstr(1)

helptime(1)

helpuid(1)

helpyorn(1)

hist(1)

history(1)

hostid(1)

hostname(1)

i386(1)

i486(1)

iconv(1)

idnconv(1)

if(1)

indxbib(1)

install(1B)

ipcrm(1)

ipcs(1)

isainfo(1)

isalist(1)

jobs(1)

join(1)

jsh(1)

kbd(1)

kdestroy(1)

keylogin(1)

keylogout(1)

kill(1)

kinit(1)

klist(1)

kmdb(1)

kmfcfg(1)

kpasswd(1)

krb5-config(1)

ksh(1)

ksh88(1)

ksh93(1)

ktutil(1)

lari(1)

last(1)

lastcomm(1)

ld(1)

ldapadd(1)

ldapdelete(1)

ldaplist(1)

ldapmodify(1)

ldapmodrdn(1)

ldapsearch(1)

ldd(1)

ld.so.1(1)

let(1)

lex(1)

lgrpinfo(1)

limit(1)

line(1)

list_devices(1)

listusers(1)

llc2_autoconfig(1)

llc2_config(1)

llc2_stats(1)

ln(1)

ln(1B)

loadkeys(1)

locale(1)

localedef(1)

logger(1)

logger(1B)

login(1)

logname(1)

logout(1)

look(1)

lookbib(1)

lorder(1)

ls(1)

ls(1B)

m4(1)

mac(1)

mach(1)

machid(1)

madv.so.1(1)

mail(1)

Mail(1B)

mail(1B)

mailcompat(1)

mailp(1)

mailq(1)

mailstats(1)

mailx(1)

make(1S)

makekey(1)

man(1)

mconnect(1)

mcs(1)

mdb(1)

mesg(1)

mkdir(1)

mkmsgs(1)

mkstr(1B)

mktemp(1)

moe(1)

more(1)

mp(1)

mpss.so.1(1)

msgcc(1)

msgcpp(1)

msgcvt(1)

msgfmt(1)

msggen(1)

msgget(1)

mt(1)

mv(1)

nawk(1)

nc(1)

ncab2clf(1)

ncakmod(1)

neqn(1)

netcat(1)

newform(1)

newgrp(1)

newsp(1)

newtask(1)

nice(1)

nl(1)

nm(1)

nohup(1)

notify(1)

nroff(1)

od(1)

on(1)

onintr(1)

optisa(1)

pack(1)

page(1)

pagesize(1)

pam_tty_tickets.so(1)

pargs(1)

passwd(1)

paste(1)

patch(1)

pathchk(1)

pax(1)

pcat(1)

pcred(1)

perl(1)

pfbash(1)

pfcsh(1)

pfexec(1)

pfiles(1)

pfksh(1)

pflags(1)

pfsh(1)

pftcsh(1)

pfzsh(1)

pg(1)

pgrep(1)

pkcs11_inspect(1)

pkginfo(1)

pkgmk(1)

pkgparam(1)

pkgproto(1)

pkgtrans(1)

pkill(1)

pklogin_finder(1)

pktool(1)

plabel(1)

pldd(1)

plgrp(1)

plimit(1)

pmadvise(1)

pmap(1)

popd(1)

ppgsz(1)

ppriv(1)

pr(1)

praliases(1)

prctl(1)

preap(1)

print(1)

printenv(1B)

printf(1)

priocntl(1)

proc(1)

prof(1)

profiles(1)

projects(1)

prs(1)

prt(1)

prun(1)

ps(1)

ps(1B)

psig(1)

pstack(1)

pstop(1)

ptime(1)

ptree(1)

pushd(1)

pvs(1)

pwait(1)

pwd(1)

pwdx(1)

ranlib(1)

rcapstat(1)

rcp(1)

read(1)

readonly(1)

red(1)

refer(1)

regcmp(1)

rehash(1)

remote_shell(1)

remsh(1)

renice(1)

repeat(1)

reset(1B)

return(1)

rksh(1)

rksh88(1)

rlogin(1)

rm(1)

rmail(1)

rmdel(1)

rmdir(1)

rmformat(1)

rmmount(1)

rmumount(1)

roffbib(1)

roles(1)

rpcgen(1)

rpm2cpio(1)

rsh(1)

runat(1)

rup(1)

rup(1C)

ruptime(1)

rusage(1B)

rusers(1)

rwho(1)

sact(1)

sar(1)

sccs(1)

sccs-admin(1)

sccs-cdc(1)

sccs-comb(1)

sccs-delta(1)

sccsdiff(1)

sccs-get(1)

sccs-help(1)

sccshelp(1)

sccs-prs(1)

sccs-prt(1)

sccs-rmdel(1)

sccs-sact(1)

sccs-sccsdiff(1)

sccs-unget(1)

sccs-val(1)

scp(1)

script(1)

sdiff(1)

sed(1)

sed(1B)

select(1)

set(1)

setenv(1)

setfacl(1)

setlabel(1)

setpgrp(1)

settime(1)

sftp(1)

sh(1)

shcomp(1)

shell_builtins(1)

shift(1)

shutdown(1B)

size(1)

sleep(1)

soelim(1)

sort(1)

sortbib(1)

sotruss(1)

source(1)

sparc(1)

spell(1)

spellin(1)

split(1)

srchtxt(1)

ssh(1)

ssh-add(1)

ssh-agent(1)

ssh-http-proxy-connect(1)

ssh-keygen(1)

ssh-keyscan(1)

ssh-socks5-proxy-connect(1)

stop(1)

strchg(1)

strconf(1)

strings(1)

strip(1)

stty(1)

stty(1B)

sum(1)

sum(1B)

sun(1)

suspend(1)

svcprop(1)

svcs(1)

switch(1)

symorder(1)

sys-suspend(1)

sysV-make(1)

t300(1)

t300s(1)

t4014(1)

t450(1)

tabs(1)

tail(1)

talk(1)

tar(1)

tbl(1)

tcopy(1)

tee(1)

tek(1)

telnet(1)

test(1)

test(1B)

tftp(1)

time(1)

timemanp(1)

times(1)

timesysp(1)

timex(1)

tip(1)

touch(1)

touch(1B)

tplot(1)

tput(1)

tr(1)

tr(1B)

trap(1)

troff(1)

true(1)

truss(1)

tset(1B)

tsort(1)

tty(1)

type(1)

typeset(1)

ul(1)

ulimit(1)

umask(1)

unalias(1)

uname(1)

uncompress(1)

unexpand(1)

unget(1)

unhash(1)

unifdef(1)

uniq(1)

units(1)

unix2dos(1)

unlimit(1)

unpack(1)

unset(1)

unsetenv(1)

until(1)

updatehome(1)

uptime(1)

userattr(1)

users(1B)

uucp(1C)

uudecode(1C)

uuencode(1C)

uuglist(1C)

uulog(1C)

uuname(1C)

uupick(1C)

uustat(1C)

uuto(1C)

uux(1C)

vacation(1)

val(1)

valdate(1)

valgid(1)

valint(1)

valpath(1)

valrange(1)

valstr(1)

valtime(1)

valuid(1)

valyorn(1)

vc(1)

vedit(1)

ver(1)

vgrind(1)

vi(1)

view(1)

vipw(1B)

volcheck(1)

volrmmount(1)

w(1)

wait(1)

wc(1)

what(1)

whatis(1)

whence(1)

whereis(1B)

which(1)

while(1)

who(1)

whoami(1B)

whocalls(1)

whois(1)

write(1)

xargs(1)

xgettext(1)

xstr(1)

yacc(1)

yes(1)

ypmatch(1)

yppasswd(1)

ypwhich(1)

zcat(1)

zlogin(1)

zonename(1)

zonestat(1)

nawk

- パターン走査およびパターン処理の言語

形式

/usr/bin/nawk  [-F ERE] [-v assignment] 'program'
 |  -f progfile... [argument]...
/usr/xpg4/bin/awk  [-F ERE] [-v assignment]... 'program'
 |  -f progfile... [argument]...

機能説明

/usr/bin/nawk/usr/xpg4/bin/awk の両ユーティリティーは、テキストデータ処理専用の nawk プログラミング言語で記述されたプログラムを実行します。nawk プログラムは、一連のパターンとそれに対応するアクション (動作) から構成されます。program を指定する文字列は、シェルによって解釈されないように単一引用符 (') で囲む必要があります。一連のパターン - アクション文は、program としてコマンド行に指定することも、-f progfile オプションで指定する 1 つ以上のファイル内に指定することもできます。パターンに一致する入力が読み取られると、そのパターンに関連付けられたアクションが実行されます。

入力は一連のレコードとして解釈されます。1 レコードはデフォルトで 1 行ですが、RS 組み込み変数を使用すれば変更できます。入力の各レコードは、program 内の各パターンと照合されます。パターンが一致するごとに、関連付けられたアクションが実行されます。

nawk ユーティリティーは、各入力レコードを一連のフィールドとして解釈します。デフォルトでは、フィールドは空白以外の文字列です。デフォルトのスペースフィールド区切り文字 (スペースまたはタブ、あるいはその両方) は、FS 組み込み変数または -F ERE オプションを使って変更できます。nawk ユーティリティーは、レコードの最初のフィールドを $1、2 番目のフィールドを $2、(以下同様) と見なします。記号 $0 はレコード全体を指します。その他のフィールドを設定すると、$0 が再評価されます。$0 を割り当てると、すべてのフィールドと NF 組み込み変数の値がリセットされます。

オプション

次のオプションがサポートされています。

-F ERE

入力が読み取られる前に、入力フィールド区切り文字が拡張正規表現 ERE であることを定義します (文字も可)。

-f progfile

nawk プログラムが含まれているファイル progfile のパス名を指定します。このオプションを複数指定した場合は、progfile として指定されたファイルが指定された順序で連結されて nawk プログラムになります。nawk プログラムは、1 つの引数としてコマンド行に指定することもできます。

-v assignment

assignment 引数は、assignment オペランドと同じ形式にする必要があります。代入の形式は var=value です。var は後述する変数の 1 つです。指定された代入は、BEGIN パターンがあればそれに関連付けられたアクションも含め、nawk プログラムの実行前に行われます。このオプションは複数回指定できます。

オペランド

次のオペランドがサポートされています。

program

-f オプションを省略すると、nawk の最初のオペランドは nawk プログラムのテキストになります。アプリケーションは、program オペランドを nawk への単一引数として提供します。テキストが復帰改行文字で終わっていない場合でも、nawk は復帰改行文字で終わっているものと解釈します。

argument

次の 2 つのタイプの argument は混在可能です。

file

読み取られる入力が含まれているファイルのパス名。プログラム内の一連のパターンと照合されます。file オペランドが指定されない場合、または - の場合は、標準入力が使用されます。

assignment

下線または移植性のある文字セットの英字で始まり、そのあとに下線、移植性のある文字セットの数字と英字、= 記号が続くオペランドは、パス名ではなく変数の代入を指定するものです。= 記号より前の文字は nawk 変数の名前を表します。この名前が nawk の予約語である場合、動作は未定義です。等号よりあとの文字は、nawk プログラム内に二重引用符 (") で囲まれているもの、つまり STRING トークンとして解釈されます。ただし、最後の文字がエスケープされていないバックスラッシュの場合、それはシーケンス「\」の最初の文字ではなく、バックスラッシュという文字そのものとして解釈されます。変数には、この STRING トークンの値が代入されます。値が数値列と考えられる場合、変数にはその数値が代入されます。このような変数代入は、そのあとに file 指定があればその処理の直前に実行されます。そのため、最初の file 引数より前の代入は、BEGIN アクション (ある場合) のあとに実行され、最後の file 引数よりあとの代入は END アクション (ある場合) の前に実行されます。file 引数がない場合は、標準入力の処理の前に代入が実行されます。

入力ファイル

nawk プログラムへの入力ファイルとして、次のソースからのものがあります。

これらはテキストファイルである必要があります。これらのファイルについて、変数 RS が復帰改行文字以外の値に設定されるかどうかによって、システムでは指定された区切り文字で終わるレコードを {LINE_MAX} バイトまでサポートしたり、もっと長いレコードをサポートすることができます。

-f progfile を指定する場合、progfile オプション引数のそれぞれが示すファイルは、nawk プログラムが含まれているテキストファイルである必要があります。

標準入力が使用されるのは、file オペランドが指定されない場合、または - の場合だけです。

拡張機能説明

nawk プログラムは、次の形式のパターンとアクションのペアから構成されます。

pattern { action }

パターンまたはアクション (中括弧を含む) のどちらかを省略することもできます。パターン - アクション文は、セミコロンまたは復帰改行文字で区切られます。

パターンを省略すると、入力のどのレコードとも一致します。アクションを省略すると、入力内の一致するレコードが標準出力に書き込まれます。

nawk プログラムの実行は、まずすべての BEGIN パターンに関連付けられたアクションをプログラム内の順序で実行することによって開始されます。次に、レコード区切り文字 (デフォルトでは復帰改行文字) が検出されるまで、各 file オペランド (ファイルを指定しない場合は標準入力) が処理され、ファイルからデータが読み取られ、現在の FS 値を使用して現在のレコードがフィールドに分割され、プログラム内の順序で各パターンが評価され、現在のレコードに一致する各パターンに関連付けられたアクションが実行されます。後続のパターンが評価される前に、一致するパターンのアクションが実行されます。最後に、すべての END パターンに関連付けられたアクションがプログラム内の順序で実行されます。

nawk 内の式

式は、パターンとアクションで使用される計算を記述します。次の表では、有効な式演算をグループごとに、優先度の高い順に並べてあります。優先度が同じ演算子は上下の横線で囲まれています。構文があいまいな式は、優先度の高い演算子が優先度の低い演算子よりも先に評価されます。この表の exprexpr1expr2、および expr3 は任意の式を表し、lvalue は代入される要素 (つまり、代入演算子の左側にあるもの) を表します。

構文
名前
結果の型
結合規則
( expr )
グループ化
expr の型
該当せず
$expr
フィールド参照
文字列
該当せず
++ lvalue
前置インクリメント
数値
該当せず
--lvalue
前置デクリメント
数値
該当せず
lvalue ++
後置インクリメント
数値
該当せず
lvalue --
後置デクリメント
数値
該当せず
expr ^ expr
べき乗
数値
! expr
論理否定
数値
該当せず
+ expr
単項プラス
数値
該当せず
- expr
単項マイナス
数値
該当せず
expr * expr
乗算
数値
expr / expr
除算
数値
expr % expr
剰余演算
数値
expr + expr
加算
数値
expr - expr
減算
数値
expr expr
文字列連結
文字列
expr < expr
より小さい
数値
なし
expr <= expr
小さいか等しい
数値
なし
expr != expr
等しくない
数値
なし
expr == expr
等しい
数値
なし
expr > expr
より大きい
数値
なし
expr >= expr
大きいか等しい
数値
なし
expr ~ expr
ERE 一致
数値
なし
expr !~ expr
ERE 不一致
数値
なし
expr in array
配列のメンバー
数値
( index ) in
多次元配列
数値
array
メンバー
expr && expr
論理積
数値
expr | | expr
論理和
数値
expr1 ? expr2
条件式
選ばれた式の型
: expr3
expr2 または expr3
lvalue ^= expr
べき乗
数値
代入
lvalue %= expr
剰余演算代入
数値
lvalue *= expr
乗算
数値
代入
lvalue /= expr
除算代入
数値
lvalue += expr
加算代入
数値
lvalue -= expr
減算代入
数値
lvalue = expr
代入
expr の型

各式には、1 つの文字列値、数値、またはその両方が入ります。すでに述べた特殊なコンテキストを除き、式の値は、その式が使われるコンテキストに必要な型に暗黙のうちに変換されます。文字列値は、次の呼び出しと同等のものによって数値に変換されます。

setlocale(LC_NUMERIC, "");
numeric_value = atof(string_value);

数値 (正確には整数値) は、文字列 %dfmt 引数として使用され、変換される数値が最初で唯一の expr 引数として使用される sprintf 関数の呼び出しと同等のものによって文字列に変換されます。その他の数値は、変数 CONVFMT の値が fmt 引数として使用され、変換される数値が最初で唯一の expr 引数として使用される sprintf 関数の呼び出しと同等のものによって文字列に変換されます。

次の場合、文字列値は数値列と見なされます。

  1. 先行および末尾の空白文字が無視されます。

  2. 無視されない最初の文字が + または - の場合、それは無視されます。

  3. 無視されない残りの文字が構文上 NUMBER トークンとして認識される場合、文字列は数値列と見なされます。

前述の手順で - 文字が無視されると、数値列の値は、認識された NUMBER トークンの数値の正負を逆にした値になります。それ以外の場合、数値列の数値は認識された NUMBER トークンの数値になります。文字列が数値列かどうかが問題になるのは、この節でその用語が使用されているコンテキストにおいてのみです。

ブール型のコンテキストで式が使用されるとき、式に数値が含まれている場合、値ゼロは偽として扱われ、その他の値は真として扱われます。それ以外の場合、NULL 文字列の文字列値は偽として扱われ、その他の値は真として扱われます。ブール型のコンテキストは、次のいずれかです。

nawk 言語は、数字や文字列を格納するための配列を提供します。配列は宣言する必要があります。配列は最初は空で、サイズは動的に変わります。連想配列機能の一種を提供する添字 (要素識別子) は文字列です。配列名とそれに続く角括弧内の添字は、構文で説明しているように、lvalue や式として使用できます。添字のない配列名を使用できるのは、次のコンテキストにおいてのみです。

有効な配列インデックスは、一部のプログラミング言語で多次元配列にインデックスが付けられるのと同様に、コンマで区切られた 1 つ以上の式から構成されます。nawk 配列は実際には 1 次元なので、SUBSEP 変数の値で区切られている個々の式の文字列値を連結することで、そのようなコンマで区切られたリストが 1 つの文字列に変換されます。

したがって、次の 2 つのインデックス処理は等しい結果となります。

var[expr1, expr2, ... exprn]
var[expr1 SUBSEP expr2 SUBSEP ... SUBSEP exprn]

in 演算子が付いた多次元インデックスは、括弧で囲む必要があります。in 演算子は、特定の配列要素の有無を調べ、無い場合には要素を作成しません。存在しない配列要素へのその他の参照を行うと、要素は自動的に作成されます。

変数と特殊変数

nawk プログラムでは、変数を参照することで変数を使用できます。関数パラメータ以外は、明示的に宣言されません。初期化されていないスカラー変数と配列要素には、ゼロの数値と空の文字列の文字列値の両方が入っています。

フィールド変数は、$ とそれに続く数字または数値式によって指定されます。負でない整数以外のものに評価されるフィールド番号 expression の結果は不確定です。この状況では、初期化されていない変数や文字列値は数値に変換される必要がありません。新しいフィールド変数は、値を割り当てることによって作成されます。存在しないフィールド (つまり、$NF のあとのフィールド) を参照すると、NULL 文字列が生成されます。ただし、存在しないフィールドに割り当てると (たとえば、$(NF+2) = 5)、NF の値が増分され、値として NULL 文字列を持つ中間フィールドが作成され、$0 の値が再計算され、OFS の値でフィールドが区切られます。各フィールド変数には、作成時に文字列値が入ります。現在のロケールの小数点文字がピリオド文字に変更された文字列は数値列と見なされ (前述の「nawk 内の式」を参照)、フィールド変数にも数値列の値が入ります。

/usr/bin/nawk、/usr/xpg4/bin/awk

nawk では次の特殊な変数を設定します。これらの変数は、/usr/bin/nawk/usr/xpg4/bin/awk の両方でサポートされます。

ARGC

ARGV 配列内の要素の数。

ARGV

オプションと program 引数を除いたコマンド行引数の配列。ゼロから ARGC - 1 までの番号が付けられます。

ARGV 内の引数は変更や追加が可能です。ARGC は変更できます。各入力ファイルが終わると、nawk は、現在の ARGC - 1 の値まで、ARGV の次の NULL 以外の要素を次の入力ファイルの名前として扱います。ARGV の要素を NULL に設定すると、入力ファイルとして扱われなくなります。名前 - は標準入力を示します。引数が assignment オペランドの形式と一致すると、その引数は file 引数ではなく代入として扱われます。

ENVIRON

変数 ENVIRON は環境値を表す配列です。配列のインデックスは環境変数の名前から成る文字列で、各配列要素の値はその変数の値から成る文字列です。環境変数の値が数値列と見なされる場合は、配列要素にもその数値が入ります。

nawk の動作が環境変数の影響を受ける (nawksystem 関数を使って実行するコマンド、および print 文、printf 文、または getline 関数を使ってパイプライン経由で実行するコマンドの環境を含む) 場合はいずれも、nawk の実行開始時点の環境が使われます。

FILENAME

現在の入力ファイルのパス名。BEGIN アクション内では、この値は未定義です。END アクション内では、この値は最後に処理された入力ファイルの名前です。

FNR

現在のファイル内の現在のレコードの序数。BEGIN アクション内では、この値はゼロです。END アクション内では、この値は最後に処理されたファイル内の最後に処理されたレコードの番号です。

FS

入力フィールド区切り文字の正規表現。デフォルトはスペース文字です。

NF

現在のレコード内のフィールドの数。BEGIN アクション内では、var 引数のない getline 関数がその前に実行されていないかぎり、NF の使用は未定義です。END アクション内では、END アクションに入る前に後続のリダイレクトされた var 引数のない getline 関数が実行されていないかぎり、NF は最後に読み取られたレコードの値を保持します。

NR

入力の開始からの現在のレコードの序数。BEGIN アクション内では、この値はゼロです。END アクション内では、この値は最後に処理されたレコードの番号です。

OFMT

出力文 "%.6g" 内でデフォルトとして数字を文字列に変換するための printf 形式。OFMT の値が浮動小数点形式の仕様でない場合、変換の結果は不確定です。

OFS

print 文出力フィールド区切り文字。デフォルトはスペース文字です。

ORS

print 出力レコード区切り文字。デフォルトは復帰改行文字です。

LENGTH

match 関数によって照合される文字列の長さ。

RS

RS の文字列値の最初の文字は入力レコード区切り文字 (デフォルトは復帰改行文字) です。RS に複数の文字が含まれている場合、結果は不確定です。RS が NULL の場合、レコードは一連の 1 つ以上の空白行で区切られます。先頭または末尾に空白行があっても、入力の先頭または最後に空のレコードが生成されることはありません。また、FS の値に関係なく、フィールド区切り文字は常に復帰改行文字になります。

RSTART

match 関数によって照合される文字列の開始位置。1 から順に番号が付いています。これは常に match 関数の戻り値と同等です。

SUBSEP

多次元配列用の添字区切り文字列。デフォルト値は \034 です。

/usr/xpg4/bin/awk

次の変数は、/usr/xpg4/bin/awk でのみサポートされます。

CONVFMT

数字を文字列に変換するための printf 形式 (OFMT が使用される出力文を除く)。デフォルトは %.6g です。

正規表現

/usr/xpg4/bin/nawk ユーティリティーは、拡張正規表現 (ERE) (regex(5) を参照) を利用しています。ただし、ERE 内で特殊文字をエスケープするときは C 言語規約を使用できます。つまり、\\\a\b\f\n\r\t\v、および次の表に示したエスケープシーケンスを使用できます。これらのエスケープシーケンスは、括弧の内でも外でも認識されます。なお、レコードは復帰改行文字で区切る必要がなく、文字列定数には復帰改行文字を含めることができるため、nawk ERE では \n シーケンスも有効です。正規表現内にスラッシュ文字を使用する場合は、次の表に示すようにエスケープ処理を行う必要があります。

エスケープシーケンス
機能説明
意味
\"
バックスラッシュ引用符
引用符文字
\/
バックスラッシュスラッシュ
スラッシュ文字
\ddd
バックスラッシュ文字のあとに 1 から 3 桁の 8 進文字 (01234567) の最長シーケンスが続きます。すべての桁が 0 である (つまり、NULL 文字を表している) 場合、動作は未定義です。
1 から 3 桁の 8 進整数で文字がエンコードされます。複数バイト文字には、バイトごとに先行 \ を含む、複数の連結されたエスケープシーケンスが必要です。
\ c
バックスラッシュ文字のあとにこの表で説明されていない文字または特殊文字が続きます (\\\a\b\f\n\r\t\v)。
未定義

正規表現照合演算子 ~ または ! ~ のどちらかを使用して、正規表現を特定のフィールドまたは文字列と照合させることができます。これらの演算子は、オペランドの右側を正規表現として解釈し、オペランドの左側を文字列として解釈します。正規表現が文字列と一致すると、~ 式は値 1 に評価され、! ~ 式は値 0 に評価されます。正規表現が文字列と一致しないと、~ 式は値 0 に評価され、! ~ 式は値 1 に評価されます。右辺のオペランドが字句トークン ERE 以外の式であれば、前述のエスケープ規約も含め、式の文字列値は拡張正規表現として解釈されます。文字列リテラル (字句トークン STRING) の値を判断するときも、これと同じエスケープ規約が適用され、この状況で文字列リテラルが使用されるときにもう一度適用されます。

ERE トークンが、~ または ! ~ 演算子の右辺以外の状況で使用されている場合、または後述の組み込み関数の引数の 1 つとして使用されている場合、結果の式の値は次のものと等価になります。

$0 ~ /ere/

gsubmatchsub 関数の ere 引数と、split 関数の fs 引数 (「文字列関数」を参照) は、拡張正規表現として解釈されます。これらの引数は ERE トークンまたは任意の式のどちらでもよく、~ または ! ~ 演算子の右辺と同じ方法で解釈されます。

-F ERE オプションを使うか、式を含んだ文字列を組み込み変数 FS に割り当てることで、フィールドの分割に拡張正規表現を使用できます。FS 変数のデフォルト値は 1 つのスペース文字です。FS の動作について次に説明します。

  1. FS が 1 つの文字の場合

    • FS がスペース文字であれば、先行および末尾のスペース文字をスキップします。フィールドは 1 つ以上のスペース文字で区切られます。

    • FS が空白以外の文字 c であれば、フィールドは個々の c によって区切られます。

  2. それ以外の場合、FS の文字列値は拡張正規表現と見なされます。拡張正規表現と一致するシーケンスの発生により、フィールドが区切られます。

gsubmatchsplit、および sub 組み込み関数の場合を除き、正規表現照合は入力レコードに基づいて行われます。つまり、レコード区切り文字 (変数 RS の値の最初の文字、デフォルトは復帰改行文字) は式に組み込めず、レコード区切り文字と一致する式はありません。レコード区切り文字が復帰改行文字以外であれば、式に組み込まれた復帰改行文字を照合させることができます。この 4 つの組み込み関数では、正規表現照合がテキスト文字列に基づいて行われます。そのため、どの文字 (復帰改行文字やレコード区切り文字を含む) もパターンに組み込め、適切なパターンを任意の文字と照合させることができます。しかし、nawk のすべての正規表現照合では、パターン、入力レコード、またはテキスト文字列に 1 つ以上の NULL 文字を使用すると、結果が未定義になります。

パターン

パターンは、有効な式、コンマで区切られた 2 つの式で指定された範囲、または 2 つの特殊パターン BEGINEND のいずれかです。

特殊パターン

nawk ユーティリティーでは、2 つの特殊パターン BEGINEND を認識します。各 BEGIN パターンは一度照合され、最初の入力レコードが読み取られる前 (以前の BEGIN アクションで getline 関数が使用された場合を除く) とコマンド行割り当てが行われる前に、関連付けられたアクションが実行されます。各 END パターンは一度照合され、最後の入力レコードが読み取られたあとに、関連付けられたアクションが実行されます。この 2 つのパターンにはアクションが関連付けられています。

BEGINEND は、他のパターンとは組み合わせられません。複数の BEGIN および END パターンを使用できます。BEGIN パターンに関連付けられたアクションは、プログラム内に指定された順序で実行されます。これは END アクションの場合も同じです。プログラム内では、END パターンが BEGIN パターンより前にあってもかまいません。

nawk プログラムが BEGIN パターンのアクションだけで構成されていて、BEGIN アクションに getline 関数が含まれていない場合、最後の BEGIN アクションの最後の文が実行されると、nawk は入力を読み取らずに終了します。nawk プログラムが END パターンのアクションだけ、または BEGIN および END パターンのアクションだけで構成されている場合、END アクションの文が実行される前に入力が読み取られます。

式パターン

式パターンは、ブール型のコンテキストの式として評価されます。結果が真の場合、パターンは一致すると見なされ、関連付けられたアクションがあればそれが実行されます。結果が偽の場合、アクションは実行されません。

パターンの範囲

パターンの範囲は、コンマで区切られた 2 つの式で構成されます。この場合、最初の式の一致から 2 番目の式の一致までの間にあるすべてのレコードに対してアクションが実行されます。この時点で、入力レコードの先頭から一致した範囲の最後まで、パターンの範囲を繰り返すことができます。

アクション

アクションは一連の文です。使用できる文は次のうちのいずれかです。

if ( expression ) statement [ else statement ]
while ( expression ) statement 
do statement while ( expression )
for ( expression ; expression ; expression ) statement 
for ( var in array ) statement 
delete array[subscript] #delete an array element
break
continue
{ [ statement ] . . . }
expression        # commonly variable = expression
print [ expression-list ] [ >expression ]
printf format [ ,expression-list ] [ >expression ]
next              # skip remaining patterns on this input line
exit [expr] # skip the rest of the input; exit status is expr
return [expr]

1 つの文を、括弧で囲まれた文のリストに置き換えることができます。文は、復帰改行文字またはセミコロンで区切られ、指定された順序で実行されます。

next 文は、現在の入力レコードの以降の処理をすべて破棄します。BEGIN または END アクション内で next が現れたり、呼び出されたりすると、動作は未定義です。

exit 文は、すべての END アクションをプログラムソース内の順序で呼び出した後、以降の入力を読み取らずにプログラムを終了させます。END アクション内の exit 文は、以降の END アクションを実行せずにプログラムを終了させます。exit 文内に式が指定されている場合は、その数値が nawk の終了ステータスになります。ただし、エラーが検出されたり、式を含んだ exit 文が実行される場合を除きます。

出力文

print 文も printf 文もデフォルトでは標準出力に書き込みます。次のように、output_redirection が指定されていれば、その宛先に出力が書き込まれます。

> expression>> expression| expression

どの場合でも、expression が評価されて、書き込み先のフルパス名 (> または >> の場合) または実行されるコマンド (| の場合) として使用される文字列が生成されます。最初の 2 つの形式を使うと、その名前のファイルが現在開いていなければ開かれ、必要ならファイルが作成されます。最初の形式を使うと、ファイルは切り捨てられます。次に、出力がファイルに付加されます。ファイルが開いているかぎり、式が同じ文字列値に評価される以降の呼び出しは、単に出力をファイルに付加していきます。同じ文字列値に評価される式で close 関数が呼び出されるまで、ファイルは開いたままです。

3 番目の形式は、コマンドの入力にパイプされたストリームに出力を書き込みます。コマンド名として expression の値を持つストリームが現在開いていない場合は、ストリームが作成されます。作成されたストリームは、command 引数として expression の値、mode 引数として w の値を指定した popen(3C) 関数の呼び出しによって作成されるものと同等です。ストリームが開いているかぎり、expression が同じ文字列値に評価される以降の呼び出しは、出力を既存のストリームに書き込みます。同じ文字列値に評価される式で close 関数が呼び出されるまで、ストリームは開いたままです。close 関数が呼び出されると、pclose 関数が呼び出されたかのようにストリームが閉じます。

これらの出力文は、コンマで区切られた expression のリストを取ります。このリストは、文法解釈において非終端記号 expr_listprint_expr_list、または print_expr_list_opt によって参照されます。ここでは、このリストを「式リスト」 と呼び、各メンバーを「式引数」 と呼びます。

print 文は、現在の出力フィールド区切り文字 (前述の変数 OFS を参照) で区切られ、出力レコード区切り文字 (前述の変数 ORS を参照) で終わる、指定された出力ストリームに各式引数の値を書き込みます。式引数はすべて文字列として扱われ、必要があれば変換されます。ただし、CONVFMT の値ではなく、OFMTprintf 形式が使用されます。空の式リストは、入力レコード全体 ($0) を意味します。

printf 文は、本書でファイル形式の説明に使用しているファイル形式表記と同様の表記に基づいて出力を生成します。出力は、文字列 format として最初の式引数、arg1 から argn までの文字列として後続の式引数で指定されたとおりに生成されます。ただし、次のような例外があります。

  1. format はグラフィック表現ではなく、実際の文字列です。そのため、空の文字位置を含めることはできません。format 文字列内のスペース文字は、変換仕様の flag 以外のコンテキストでは、通常の文字として扱われ、出力にコピーされます。

  2. 文字セットにデルタ文字が含まれていて、その文字が format 文字列に現れた場合は、通常の文字として扱われ、出力にコピーされます。

  3. バックスラッシュ文字で始まる escape sequences は、通常の文字のシーケンスとして扱われ、出力にコピーされます。なお、このようなシーケンスは、リテラル文字列に現れたときに nawk によって字句が解析されますが、printf 文では特に処理されません。

  4. field width または precision は、数字列ではなく * 文字として指定できます。この場合、式リストの次の引数が取り出され、その数値がフィールド幅または精度と見なされます。

  5. システムでは、format 文字列で指定されていない空白文字を d または u 変換仕様の出力の先頭や末尾には付けません。

  6. システムでは、format 文字列で指定されていない先行ゼロを o 変換仕様の出力には付けません。

  7. c 変換仕様の場合、引数が数値であれば、エンコーディングとしてその値を持つ文字が出力されます。値がゼロの場合、または文字セットのどの文字にもエンコードされていない場合、動作は未定義です。引数が数値を持たない場合、文字列値の最初の文字が出力されます。文字列に文字が含まれていない場合、動作は未定義です。

  8. 引数が必要な変換仕様のそれぞれについて、次の式引数が評価されます。c 変換以外は、変換仕様に応じて値が適切な型に変換されます。

  9. format 文字列内のすべての変換仕様を満たすだけの十分な式引数がない場合、動作は未定義です。

  10. format 文字列内の文字シーケンスが % 文字で始まるが、有効な変換仕様を形成していない場合、動作は未定義です。

printprintf はどちらも、少なくとも {LINE_MAX} バイトを出力できます。

関数

nawk 言語は、算術関数、文字列関数、入出力関数、一般関数など、さまざまな組み込み関数を備えています。

算術関数

int を除き、算術関数は ISO C 標準に基づいています。エラーが返される、または動作が未定義であると ISO C 標準で指定している場合、動作は未定義です。文法上は引数や括弧のない組み込み関数が認められていますが、次のリストで引数や括弧が省略可能 ([ ] 括弧で表示) と示されていないかぎり、省略した場合の結果は未定義です。

atan2(y,x)

y/x の逆正接を返します。

cos(x)

x をラジアン単位とし、x の余弦を返します。

sin(x)

x をラジアン単位とし、x の正弦を返します。

exp(x)

x の指数関数を返します。

log(x)

x の自然対数を返します。

sqrt(x)

x の平方根を返します。

int(x)

引数を切り捨てて、整数にします。つまり x が 0 よりも大きい場合は、0 に向かって切り捨てます。

rand()

0 ≤ n < 1 の範囲の乱数 n を返します。

srand([expr])

rand のシード値を expr に設定します。expr が省略された場合は、時刻を使用します。直前のシード値が返されます。

文字列関数

次のリストの文字列関数がサポートされています。文法上は引数や括弧のない組み込み関数が認められていますが、次のリストで引数や括弧が省略可能 ([ ] 括弧で表示) と示されていないかぎり、省略した場合の結果は未定義です。

gsub(ere,repl[, in])

後述の sub と同様の機能ですが、相違点は (ed ユーティリティーの一括置換のように) 指定されたときに、$0 または in 引数内に出現する正規表現をすべて置換することです。

index(s,t)

文字列 s の中で文字列 t が最初に出現する位置 (最初の文字を 1 として文字数を数えたもの) を返します。出現しない場合はゼロを返します。

length[([s])]

引数を文字列として解釈し、その長さ (文字数) を返します。引数が指定されていない場合は、レコード $0 全体の長さを返します。

match(s,ere)

文字列 s の中で拡張正規表現 ere が出現する位置 (最初の文字を 1 として文字数を数えたもの) を返します。出現しない場合はゼロを返します。RSTART は開始位置 (返される値と同じ) に設定され、一致しない場合はゼロに設定されます。RLENGTH は一致した文字列の長さに設定され、一致しない場合は -1 に設定されます。

split(s,a[, fs])

文字列 s を配列要素 a[1]、a[2]、...、 a[n] に分割し、値 n を返します。この分割は、拡張正規表現 fs によって行われ、fs が指定されていない場合はフィールドセパレータ FS によって行われます。各配列要素は、作成されたときに文字列値を持ちます。配列要素に割り当てられた文字列が、現在のロケールの小数点文字がピリオド文字に変更されていて、数値列と見なされる場合は、配列要素もその数値列の数値を持つことになります。fs の値が NULL 文字列の場合、結果は不確定です。

sprintf(fmt,expr,expr,...)

fmt で指定した printf 形式に従って式を書式設定し、結果として得られた文字列を返します。

sub(ere,repl[, in])

文字列 in 内で最初に見つかった拡張正規表現 ERE のインスタンスを文字列 repl に置き換え、置換した数を返します。文字列 repl 内に出現するアンパサンド (&) は、正規表現に一致する in 内の文字列に置換されます。アンパサンドの前にバックスラッシュ (\) を付けると、リテラルのアンパサンド文字として解釈されます。バックスラッシュが連続で 2 つ現れると、単一のリテラルバックスラッシュ文字として解釈されます。そのほかに現れるバックスラッシュ (ほかの文字の前など) は、リテラルバックスラッシュ文字として処理されます。repl が文字列リテラルの場合、アンパサンド文字の処理は字句処理 (バックスラッシュによるエスケープシーケンスの字句処理など) のあとに発生します。in を指定し、それが lvalue 以外の場合、動作は未定義です。in を省略した場合、nawk では代わりに現在のレコード ($0) が使用されます。

substr(s,m[, n])

文字列 s 内の m 文字目から始まる最大 n 文字の長さの部分文字列を返します。n がない場合、部分文字列の長さは文字列 s の長さによって制限されます。

tolower(s)

文字列 s に基づいて文字列を返します。現在のロケールの LC_CTYPE カテゴリによって tolower マッピングを持つように指定されている s 内の各大文字が、そのマッピングで指定されている小文字に置換されます。s 内のほかの文字は変更されません。

toupper(s)

文字列 s に基づいて文字列を返します。現在のロケールの LC_CTYPE カテゴリによって toupper マッピングを持つように指定されている s 内の各小文字が、そのマッピングで指定されている大文字に置換されます。s 内のほかの文字は変更されません。

パラメータとして ERE を取る前述の関数はすべて、次に定義されているように、正規表現であるパターン値または文字列値の式を受け付けます。

入出力関数と一般関数

入出力関数と一般関数は次のとおりです。

close(expression)

print または printf 文で開かれたファイルまたはパイプ、あるいは同じ文字列値の expression を指定した getline 呼び出しで開かれたファイルまたはパイプを閉じます。正常に閉じられた場合、関数は 0 を返します。それ以外の場合は、ゼロ以外を返します。

expression|getline[var]

コマンドの出力からパイプされたストリームから、入力レコードを読み取ります。コマンド名として expression の値を持つストリームが現在開いていない場合は、ストリームが作成されます。作成されたストリームは、command 引数として expression の値、mode 引数として r の値を指定した popen 関数の呼び出しによって作成されるものと同等です。ストリームが開いているかぎり、expression が同じ文字列値に評価される以降の呼び出しは、ファイルから後続のレコードを読み取ります。同じ文字列値に評価される式で close 関数が呼び出されるまで、ストリームは開いたままです。close 関数が呼び出されると、pclose 関数が呼び出されたかのようにストリームが閉じます。var がない場合、$0 および NF が設定されます。それ以外の場合、var が設定されます。

| の左側 (getline を含む式の先頭まで) に括弧で囲まれていない演算子 (連結を含む) がある場合、getline 演算子の構造があいまいになる可能性があります。演算子 $ のコンテキストでは、|$ よりも優先度が低いかのように動作します。その他の演算子を評価した結果は不確定であるため、移植性のあるアプリケーションでは、このような表記をすべて正しく括弧で囲む必要があります。

getline

$0 に、現入力ファイルの次の入力レコードを設定します。この形式の getline では、NFNR、および FNR 変数を設定します。

getline var

変数 var に、現在の入力ファイルの次のレコードを設定します。この形式の getline では、FNR および NR 変数を設定します。

getline [var] < expression

指定されたファイルから次の入力レコードを読み取ります。expression が評価されて、フルパス名として使用される文字列が生成されます。その名前のファイルが現在開いていない場合は開きます。ストリームが開いているかぎり、expression が同じ文字列値に評価される以降の呼び出しは、ファイルから後続のレコードを読み取ります。同じ文字列値に評価される式で close 関数が呼び出されるまで、ファイルは開いたままです。var がない場合、$0 および NF が設定されます。それ以外の場合、var が設定されます。

< の右側 (getline を含む式の終わりまで) に括弧で囲まれていない 2 項演算子 (連結を含む) がある場合、getline 演算子の構造があいまいになる可能性があります。このような構造を評価した結果は不確定であるため、移植性のあるアプリケーションでは、このような表記をすべて正しく括弧で囲む必要があります。

system(expression)

expression で指定されたコマンドを、system(3C) 関数と同等の方法で実行し、コマンドの終了ステータスを返します。

getline 関数はどの形式でも、正常終了時には 1、ファイルの終わりに達すると 0、エラーが発生時には -1 を返します。

ファイルやパイプラインの名前として文字列が使用されている場所では、文字列のテキストをまったく同じにする必要があります。「同じ文字列値」とは「等価文字列」を意味し、スペース文字が違うだけでも異なるファイルを表すことになります。

ユーザー定義関数

nawk 言語ではユーザー定義関数も使用できます。ユーザー定義関数は次のように定義できます。

function name(args, . . .) { statements }

関数は、nawk プログラム内のどこからでも参照でき、特に、その定義より前に使用できます。関数の有効範囲はグローバルです。

関数の引数は、スカラーまたは配列のどちらでもかまいません。スカラーを使用する関数に引数として配列名が渡された場合、または配列を使用する関数に引数としてスカラー式が渡された場合、その動作は未定義です。関数の引数は、スカラーの場合は値によって、配列名の場合は参照によって渡されます。引数名は関数に対してローカルであり、その他のすべての変数名はグローバルです。引数名と関数名または特殊な nawk 変数名に同じ名前は使用されません。グローバルな有効範囲を持つ変数名と関数名に同じ名前を使用しないでください。同じ有効範囲内では、スカラー変数と配列に同じ名前を使用しないでください。

関数定義内のパラメータの数は、関数呼び出しのときのパラメータの数と一致する必要はありません。ローカル変数として、余分な仮パラメータを使用できます。関数定義内の引数よりも少ない引数が関数呼び出しの際に指定された場合、関数本体でスカラーとして使用されている余分なパラメータは、NULL 文字列の文字列値とゼロの数値で初期化されます。また、関数本体で配列として使用されている余分なパラメータは、空の配列として初期化されます。関数定義内の引数よりも多い引数が関数呼び出しの際に指定された場合、その動作は未定義です。

関数の呼び出し時に、関数名と左括弧の間にスペースを入れることはできません。関数呼び出しは入れ子にすることができ、再帰呼び出しも可能です。入れ子または再帰関数呼び出しから戻っても、参照によって渡された配列パラメータ以外、呼び出し側関数のパラメータのどの値も変わりません。return 文を使用すれば、値を返すことができます。return 文が関数定義の外で使用された場合、その動作は未定義です。

関数定義において、左括弧より前と右括弧よりあとの復帰改行文字は任意指定です。関数定義は、パターンとアクションのペアが許可されている場所であればプログラム内のどこに置いてもかまいません。

使用法

indexlengthmatch、および substr 関数と ISO C 標準の同様の関数とを混同しないようにしてください。nawk バージョンでは文字を扱い、ISO C 標準ではバイトを扱います。

連結演算は、明示的な演算子ではなく隣接する式によって表現されるので、評価の正しい優先度を適用するため、括弧を使う必要があることがよくあります。

ファイルが 2G バイト (231 バイト) 以上ある場合の nawk の動作については、largefile(5) を参照してください。

使用例

sh を使用するアプリケーションの場合、コマンド行に指定する nawk プログラムは、単一引用符で囲んで指定する (たとえば、'program') のがもっとも簡単な方法です。nawk プログラムには一般に、二重引用符をはじめとする、シェルに対して特殊な意味を持つ文字が含まれていることが多いためです。nawk プログラムに単一引用符文字が含まれている場合、プログラムの大部分を単一引用符で囲んで文字列として指定し、引用符付きの単一引用符文字とシェルによって連結するのが通常もっとも簡単な方法です。例:

nawk '/'\''/ { print "quote:", $0 }'

これは、標準入力から読み取った単一引用符文字を含むすべての行に quote: という接頭辞を付けて出力します。

簡単な nawk プログラムの例を次に示します。

例 1 第 3 フィールドの値が 5 より大きい入力行をすべて標準出力に書き出します。

$3 > 5

例 2 10 行ごとに書き出します。

(NR % 10) == 0

例 3 部分文字列が正規表現と一致する行を書き出します。

/(G|D)(2[0-9][[:alpha:]]*)/

例 4 部分文字列として、文字 G または D のあとに一連の数字と文字を伴う行を出力します。

この例では、文字クラス digitalpha を使って、言語に依存しない数字と英字をそれぞれ照合します。

/(G|D)([[:digit:][:alpha:]]*)/

例 5 第 2 フィールドは正規表現と一致するが第 4 フィールドは一致しない、という行を出力します。

$2 ~ /xyz/ && $4 !~ /xyz/

例 6 第 2 フィールドにバックスラッシュが含まれている行を出力します。

$2 ~ /\\/

例 7 第 2 フィールドにバックスラッシュが含まれている行を出力します (別の方法)。

ここではバックスラッシュによるエスケープを 2 度解釈しています。1 度は文字列の字句処理時、もう 1 度は正規表現の処理時です。

$2 ~ "\\\\"

例 8 各行の最後から 2 番目のフィールドと最後のフィールドをコロンで区切って出力します。

{OFS=":";print $(NF-1), $NF}

例 9 各行の行番号とフィールドの数を出力します。

行番号、コロン、フィールド数を表す 3 つの文字列が連結され、1 つの文字列として標準出力に書き込まれます。

{print NR ":" NF}

例 10 長さが 72 文字を超えている行を出力します。

{length($0) > 72}

例 11 最初の 2 つのフィールドを逆の順序で、OFS で区切って出力します。

{ print $2, $1 }

例 12 前述と同様ですが、入力フィールドはコンマ、またはスペース文字とタブ文字、あるいはその両方で区切られています。

BEGIN { FS = ",[\t]*|[\t]+" } { print $2, $1 }

例 13 先頭のカラムの値を合計し、その合計値と平均値を出力します。

{s += $1 } END {print "sum is ", s, " average is", s/NR}

例 14 フィールドの内容を逆の順序で、1 行につき 1 フィールドずつ出力します。1 入力行につき多数の出力行が発生します。

{ for (i = NF; i > 0; --i) print $i }

例 15 「start」と「stop」という 2 つの文字列の間にあるすべての行を出力します。

/start/, /stop/

例 16 先頭フィールドの値が直前の行の先頭フィールドと異なっている行をすべて出力します。

$1 != prev { print; prev = $1 }

例 17 echo コマンドの動作をシミュレートします。

BEGIN { for (i = 1; i < ARGC; ++i) printf "%s%s", ARGV[i], i==ARGC-1?"\n":"" }

例 18 PATH 環境変数に含まれているパス接頭辞を 1 行につき 1 つずつ出力します。

BEGIN { n = split (ENVIRON["PATH"], path, ":") for (i = 1; i <= n; ++i) print path[i] } 

例 19 「input」ファイルの内容を、ページ番号 5 を開始ページとして出力します。

input という名前のファイルがあり、次の形式のページヘッダーが含まれているとします。

Page#

また、program という名前のファイルの内容は次のとおりとします。

/Page/{ $2 = n++; }
{ print }

ここで、次に示すコマンドを実行します。

nawk -f program n=5 input

これにより、input ファイルが、ページ番号 5 を開始ページとして出力されます。

環境変数

実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。LC_COLLATELC_CTYPELC_MESSAGES 、および NLSPATH

LC_NUMERIC

数値入力の解釈、数値と文字列との変換、数値出力のフォーマットに用いる、小数点文字を決定します。awk プログラム (コマンド行引数で指定される代入も含む) の処理で認識される小数点文字は、ロケールに関係なくピリオド (POSIX ロケールの小数点文字) です。

終了ステータス

次の終了値が返されます。

0

指定されたファイルはすべて正常に処理されました。

>0

エラーが発生しました。

プログラム内で exit 式を使って終了ステータスを変更することができます。

属性

属性についての詳細は、attributes(5) を参照してください。

/usr/bin/nawk

属性タイプ
属性値
使用条件
system/core-os

/usr/xpg4/bin/awk

属性タイプ
属性値
使用条件
system/xopen/xcu4

関連項目

awk(1)ed(1)egrep(1)grep(1)lex(1)sed(1)popen(3C)printf(3C)system(3C)attributes(5)environ(5)largefile(5)regex(5)XPG4(5)

The AWK Programming Language』、Aho, A. V.、B. W. Kernighan、P. J. Weinberger 共著、Addison-Wesley 発行、1988 年

診断

file オペランドが指定され、指定されたファイルにアクセスできない場合、nawk は標準エラーに診断メッセージを書き込んだあと、それ以上何もせずに終了します。

program オペランドまたは progfile オペランドで指定されたプログラムが有効な nawk プログラム (「拡張機能説明」で指定されている) でない場合、その動作は未定義です。

注意事項

入力行にスペースが含まれる場合、出力時に保証されません。

数値と文字の間の明示的な変換は行われません。式が数値として扱われるようにするには、式に 0 を加算します。式が文字列として扱われるようにするには、式に NULL 文字列 ("") を連結します。