awk

2012/11/07 1行1レコード形式のデータ,特に大きなデータを取り扱うのに便利なのだということを某MLで知る.

今扱っている固定長データ(大きいのでも600MBくらいだけど)から分析に使うフィールドを切り出すのに便利そうだ.

改行コードはLFを前提としていることに注意(2012/11/27追記)

網羅的なガイドは以下 http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_toc.html

こちらの方が取っつきやすいかも http://antibayesian.hateblo.jp/entry/2014/09/15/162605

フィールドの指定方法

awk.txtの全レコードに対して,2番目のフィールドを(標準)出力するには

awk '{ print $2 }' awk.txt

awk.txtの全レコードに対して,10番目と3番目のフィールドを(標準)出力するには

awk '{ print $10 $3 }' awk.txt

これだと連結されるので,間にブランクを入れる

awk '{ print $10 " " $3 }' awk.txt

詳しい解説は以下

http://www.ibm.com/developerworks/jp/linux/library/l-awk1/ http://shellscript.sunone.me/awk.html

2012/11/22 追記

パターンによるレコード範囲指定

レコード番号NRを使った範囲指定

組み込み変数のNRはレコード番号を指定する.ただし,NRとNFは変数とはいっても通常,値は代入はせず読み取り専用で用いる

awk.txtのレコード番号3(3行目)の,2番目のフィールドを(標準)出力するには

awk 'NR == 3 { print $2 }' awk.txt
awk.txtのレコード番号が5未満(1~4)の,1番目のフィールドを(標準)出力するには
awk 'NR < 5 { print $1 }' awk.txt

awk.txtのレコード番号が5未満(1~4)またはレコード番号が7の,全てのフィールドをout.txtに出力するには

awk 'NR < 5 || NR == 7 { print }' awk.txt > out.txt
※これは一行目がラベルになっているデータを分割する際に有用

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

-Fオプションにより,フィールドの区切り文字を指定することが出来る.

awk.txtの区切り文字をスペースに指定して,全レコードに対して,2番目のフィールドを(標準)出力するには

awk -F" " '{ print $2 }' awk.txt
awk.csvの区切り文字をカンマに指定して,全レコードに対して,2番目のフィールドを(標準)出力するには
awk -F"," '{ print $2 }' awk.csv

ファイルへの出力

awk.txtのレコード番号が5未満(1~4)の,1番目と2番目のフィールドをカンマで区切ってoutput.csvに出力するには

awk 'NR < 5 { print $1 "," $2 }' awk.txt > output.csv
出力されたoutput.csvの中身

1,B1
2,B2
3,B3
4,B4

固定長レコードの読込

参考:http://www.geocities.jp/cygnus_odile/awkpage/14_awk_fixed_length.html

組み込み変数のFIELDWIDTHSを使って固定長レコードの各フィールド幅を指定可能(らしいが,上手くいかない)

このページで使っているデータ

awk.txt

snippet.text
1 B1 C1
2 B2 C2
3 B3 C3
4 B4 C4
5 B5 C5
6 B6 C6
7 B7 C7
8 B8 C8
9 B9 C9
10 B10 C10
11 B11 C11
12 B12 C12
13 B13 C13
14 B14 C14
15 B15 C15
16 B16 C16
17 B17 C17
18 B18 C18
19 B19 C19
20 B20 C20
21 B21 C21
22 B22 C22
23 B23 C23
24 B24 C24
25 B25 C25
26 B26 C26
27 B27 C27
28 B28 C28
29 B29 C29
30 B30 C30
31 B31 C31
32 B32 C32
33 B33 C33

awk.csv

snippet.csv
1,B1,C1
2,B2,C2
3,B3,C3
4,B4,C4
5,B5,C5
6,B6,C6
7,B7,C7
8,B8,C8
9,B9,C9
10,B10,C10
11,B11,C11
12,B12,C12
13,B13,C13
14,B14,C14
15,B15,C15
16,B16,C16
17,B17,C17
18,B18,C18
19,B19,C19
20,B20,C20
21,B21,C21
22,B22,C22
23,B23,C23
24,B24,C24
25,B25,C25
26,B26,C26
27,B27,C27
28,B28,C28
29,B29,C29
30,B30,C30
31,B31,C31
32,B32,C32
33,B33,C33

fixedlength.txt

snippet.txt
fixedlength 12345678900 abcdefghijk
12345678900 12345678900 abcdefghijk
abcdefghijk 12345678900 fixedlength
memo/awk.txt · 最終更新: 2016/07/17 13:22 (外部編集)
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0

- Rental Orbit Space -