「Linuxコマンド - awk」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == <code>awk</code>コマンドとは、入力として受け取った文字列に対して、フィールド区切り文字やレコード区切り文字を指…」)
 
編集の要約なし
65行目: 65行目:
  # 出力
  # 出力
  1 2
  1 2
<br><br>
== OFS ==
<code>OFS</code>(Output Field Separator)とは、awkコマンドの組み込み変数であり、出力のフィールド区切り文字を指定する。<br>
<code>-v</code>オプションは、変数(variable)を指定するという意味のオプションである。<br>
-v '変数=xx'
<br>
以下の例では、OFSに半角スペースを指定して、フィールドの出力を#で区切る。<br>
# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'OFS= ' '{print $1,$3}'
# 出力
1 3
<br><br>
== RS ==
<code>RS</code>(Record Separator)とは、awkコマンドの組み込み変数であり、入力のレコード区切り文字を指定する。<br>
<br>
以下の例では、/を区切り文字に指定して、1:2と3:4に分けている。<br>
/をレコード区切り文字にして、各レコードから1フィールド目を取得している。<br>
出力は、改行で区切って出力される。(ORSが指定されていないため)<br>
# 実行
echo 1:2/3:4 | awk -F'[:]' -v 'RS=/' '{print $1}'
# 出力
1
3
<br>
# 実行
echo 1:2/3:4 | awk -F'[:]' -v 'RS=/' '{print $1,$2}'
# 出力
1 2
3 4
<br>
フィールド区切り文字とレコード区切り文字で同じ文字がある場合、レコード区切り文字が優先される。<br>
# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'RS=/' '{print $1,$2}'
# 出力
1 2
3 4
<br><br>
== ORS ==
<code>ORS</code>(Output Record Separator)とは、awkコマンドの組み込み変数であり、出力のレコード区切り文字を指定する。<br>
<br>
以下の例では、"This is ORS"を指定して、レコードの出力を区切っている。<br>
# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'RS=/' -v 'ORS=This is ORS' '{print $1,$2}'
# 出力
1 2This is ORS3 4
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]
[[カテゴリ:CentOS]][[カテゴリ:SUSE]][[カテゴリ:Raspberry_Pi]]

2020年9月5日 (土) 11:32時点における版

概要

awkコマンドとは、入力として受け取った文字列に対して、フィールド区切り文字やレコード区切り文字を指定して、
列に対する処理を行うためのコマンドである。


awkコマンドの基本書式

awkコマンドの基本書式を以下に記載する。

awk -F'[フィールド区切り文字(複数可能)]' -v '変数=xx' '{awkコマンド}' file



フィールドの出力

標準出力を行うawkコマンドのprintを使用して、awkコマンドで指定したフィールドを取得する。
-F'[フィールド区切り文字]'オプションを指定しない場合、区切り文字にはタブまたは半角スペースが選択される。

1フィールド目を出力 : print $1

# 実行
echo 1 2 3 4 | awk '{print $1}'

# 出力
1


2フィールド目の出力 : print $2

# 実行
echo 1 2 3 4 | awk '{print $2}'

# 出力
2


全ての文字列の出力 : print $0 または print

# 実行
echo 1 2 3 4 | awk '{print $0}'

# 出力
1 2 3 4


# 実行
echo 1 2 3 4 | awk '{print}'

# 出力
1 2 3 4


フィールド区切り文字の指定

フィールド区切り文字として、":"を指定する。

# 実行
echo 1:2:3:4 | awk -F'[:]' '{print $1}'

# 出力
1


また、フィールド区切り文字は複数指定できる。

以下の例では、フィールド区切り文字として、":"と"/"を指定している。
並べて記述することで、":"と"/"がフィールド区切り文字として扱われる。

# 実行
echo 1:2/3:4 | awk -F'[:/]' '{print $3}'

# 出力
3


複数フィールドの出力は、半角スペースで区切られる。(OFSを指定していないため)
OFSについては、後述のセクションを参照すること。

# 実行
echo 1:2/3:4 | awk -F'[:/]' '{print $1,$2}'

# 出力
1 2



OFS

OFS(Output Field Separator)とは、awkコマンドの組み込み変数であり、出力のフィールド区切り文字を指定する。
-vオプションは、変数(variable)を指定するという意味のオプションである。

-v '変数=xx'


以下の例では、OFSに半角スペースを指定して、フィールドの出力を#で区切る。

# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'OFS= ' '{print $1,$3}'

# 出力
1 3



RS

RS(Record Separator)とは、awkコマンドの組み込み変数であり、入力のレコード区切り文字を指定する。

以下の例では、/を区切り文字に指定して、1:2と3:4に分けている。
/をレコード区切り文字にして、各レコードから1フィールド目を取得している。
出力は、改行で区切って出力される。(ORSが指定されていないため)

# 実行
echo 1:2/3:4 | awk -F'[:]' -v 'RS=/' '{print $1}'

# 出力
1
3


# 実行
echo 1:2/3:4 | awk -F'[:]' -v 'RS=/' '{print $1,$2}'

# 出力
1 2
3 4


フィールド区切り文字とレコード区切り文字で同じ文字がある場合、レコード区切り文字が優先される。

# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'RS=/' '{print $1,$2}'

# 出力
1 2
3 4



ORS

ORS(Output Record Separator)とは、awkコマンドの組み込み変数であり、出力のレコード区切り文字を指定する。

以下の例では、"This is ORS"を指定して、レコードの出力を区切っている。

# 実行
echo 1:2/3:4 | awk -F'[:/]' -v 'RS=/' -v 'ORS=This is ORS' '{print $1,$2}'

# 出力
1 2This is ORS3 4