My AWK tips


むかし諸々の都合で作成したAwkスクリプト
ログ調査系で役に立つものを掲載した。


awk_dupcheck
#------------------------------------------------------------------------------#
#重複行検出
#特定のフィールドが同じ行が2個以上があったら該当行をプリントする
# 1liner  # gawk.exe "{ arr[$1]++; } END{for(x in arr){ if (arr[x]>=2) print arr[x] , x }}" ファイル名
{ arr[$1]++; }
END{
for(x in arr){
if (arr[x]>=2) print arr[x] , x
}
}
#------------------------------------------------------------------------------#



awk_12dupcheck
#------------------------------------------------------------------------------#
#$1,$2の重複テスト
#$1と$2の組み合わせが同じ行が2個以上があったら該当行をプリントする
# 1liner
#gawk.exe "{ arr[$1$2]++; } END{for(x in arr){ if (arr[x]>=2) print arr[x] , x }}" ファイル名
{ arr[$1$2]++; }
END{
for(x in arr){
if (arr[x]>=2) print arr[x] , x
}
}
#------------------------------------------------------------------------------#


awk_countline
#------------------------------------------------------------------------------#
# キーワードにマッチした行数を取り出す
# 1liner :
# gawk.exe "$0~/_RegEx_/{ arr[FILENAME]++} END{ for (element in arr ) {print element,arr[element]}}" ファイル名
#------------------------------------------------------------------------------#
_RegEx_は正規表現


awk_delsharp
#------------------------------------------------------------------------------#
# #ではじまる行を削って空行も削る(Unix設定ファイルコメント行削除)
# remove blank lines and #-start lines as a commnent
# 1liner:
# Win# gawk.exe "$0!~/^#|^$/" inputfile
# Linux# awk '$0!~/^#|^$/' inputfile
#
$0!~/^#|^$/
{
print $0
}
#------------------------------------------------------------------------------#

2015/03/06追記

gawk '$0!~/^#|^$/' inputfile でたいてい事足りる。

もし 空白のみの行(^ *$)と行頭から#までの間にスペースしかない行(^ *#)を除外したければ
次のようにするけど手で打つには冗長。そこまでしてコメントを削除することはないんじゃないかな。
gawk '$0!~/^#|^$|^ *$|^ *#/' inputfile


awk_grep
#------------------------------------------------------------------------------#
# grep -n
# 1liner: # gawk.exe "$0~/regex/ { print FILENAME, $0 }" inputfile
$0~/regex/ {
print FILENAME,NR,"¥t:", $0
}
#------------------------------------------------------------------------------#

awk_ikkoue
#------------------------------------------------------------------------------#
## 探している文字列を持つ行とその一個上の行を出力する
# Unix# awk -f ikkoue.awk inputfile
# Win# gawk.exe -f ikkoue.awk inputfile
## ”この行” を何かマッチさせたい文字(正規表現)に編集してください
BEGIN{
i=1
}
{
ar[i++]=$0
}
END {
print i;
print "------------------"
for (x=1;x<=i;x++){
if (ar[x]~/この行/){
# ar[x-1]は一こ上の行
print x-1": " ar[x-1]
print x": " ar[x]
}
}
}
#------------------------------------------------------------------------------#

awk_strftime
#------------------------------------------------------------------------------#
# convert seconds since EpochTime to Formatted date
# 1liner : (GNU AWK)
# Unix# gawk 'BEGIN{print strftime("%c",1301905654)}'
# Win#gawk.exe "BEGIN{print strftime(¥"%c¥",1301905654)}"
BEGIN{
print strftime("%c",ARGV[1]);
}
#------------------------------------------------------------------------------#

awk_wcl
#------------------------------------------------------------------------------#
#行数を出力
# 1liner : # gawk.exe "END{print NR}" ファイル名
END{
print NR
}
#------------------------------------------------------------------------------#

awk_getuniq
#------------------------------------------------------------------------------#
#重複行を排除する
# awk -f getuniq.awk inputfile
# awk '{line[$0]++;if(line[$0]<=1){print $0}}'
# gawk.exe "{line[$0]++;if(line[$0]<=1){print $0}}"
{
line[$0]++;
if(line[$0]<=1){
print $0
}
#------------------------------------------------------------------------------#

コメント

このブログの人気の投稿

4.3.0 Temporary Lookup Failureでドツボってた話

tomcat起動時の環境変数でJRE_HOMEを指定するときに

何が得られて何処へ向かうかだけを問うべき