差分
この文書の現在のバージョンと選択したバージョンの差分を表示します。
memo:awk [2015/03/03 05:42] hasegawa [レコード番号NRを使った範囲指定] |
memo:awk [2016/07/17 04:22] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 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番目のフィールドを(標準)出力するには | ||
- | <code awk> | ||
- | awk '{ print $2 }' awk.txt | ||
- | </code> | ||
- | |||
- | awk.txtの全レコードに対して,10番目と3番目のフィールドを(標準)出力するには | ||
- | |||
- | <code awk> | ||
- | awk '{ print $10 $3 }' awk.txt | ||
- | </code> | ||
- | |||
- | これだと連結されるので,間にブランクを入れる | ||
- | <code awk> | ||
- | awk '{ print $10 " " $3 }' awk.txt | ||
- | </code> | ||
- | |||
- | 詳しい解説は以下 | ||
- | |||
- | 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番目のフィールドを(標準)出力するには | ||
- | <code awk> | ||
- | awk 'NR == 3 { print $2 }' awk.txt | ||
- | </code> | ||
- | awk.txtのレコード番号が5未満(1~4)の,1番目のフィールドを(標準)出力するには | ||
- | <code awk> | ||
- | awk 'NR < 5 { print $1 }' awk.txt | ||
- | </code> | ||
- | |||
- | awk.txtのレコード番号が5未満(1~4)またはレコード番号が7の,全てのフィールドをout.txtに出力するには | ||
- | <code awk> | ||
- | awk 'NR < 5 || NR == 7 { print }' awk.txt > out.txt | ||
- | </code> | ||
- | ※これは一行目がラベルになっているデータを分割する際に有用 | ||
- | ===== フィールド区切り文字の指定 ===== | ||
- | -Fオプションにより,フィールドの区切り文字を指定することが出来る. | ||
- | |||
- | awk.txtの区切り文字をスペースに指定して,全レコードに対して,2番目のフィールドを(標準)出力するには | ||
- | <code awk> | ||
- | awk -F" " '{ print $2 }' awk.txt | ||
- | </code> | ||
- | awk.csvの区切り文字をカンマに指定して,全レコードに対して,2番目のフィールドを(標準)出力するには | ||
- | <code awk> | ||
- | awk -F"," '{ print $2 }' awk.csv | ||
- | </code> | ||
- | |||
- | ===== ファイルへの出力 ===== | ||
- | awk.txtのレコード番号が5未満(1~4)の,1番目と2番目のフィールドをカンマで区切ってoutput.csvに出力するには | ||
- | <code awk> | ||
- | awk 'NR < 5 { print $1 "," $2 }' awk.txt > output.csv | ||
- | </code> | ||
- | 出力された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 | ||
- | <file txt awk.txt> | ||
- | 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 | ||
- | </file> | ||
- | |||
- | awk.csv | ||
- | ```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 | ||
- | ```txt | ||
- | fixedlength 12345678900 abcdefghijk | ||
- | 12345678900 12345678900 abcdefghijk | ||
- | abcdefghijk 12345678900 fixedlength | ||
- | ``` | ||
- | |||
- | {{tag>linux mac}} | ||
- | |||
- | |||
- | |||