1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWK One Liner(一行野郎)

Posted at

AWK One Liner(一行野郎)

データ整形、ログ集計に役立つAWKのOne Linerを記載しました。
AWK本からの引用です。

1. 入力行の総数を印字

END { print NR }

2. 10行目の入力行を印字する

NR == 10

3. すべての入力行の最後の欄を印字する

{ print $NF }

4. 最後の行の最後の欄を印字する

    { field = $NF }
END { print field }

5. 4個より多い欄を持つすべての入力行を印字する

NF > 4

6. 最後の欄が4より大きいようなすべての入力行を印字する

$NF > 4

7. すべての入力行の欄の総数を印字する

    { nf = nf + NF }
END { print nf }

8. Bethを含む行の総数を印字する

/Beth/ { nlines = nlines + 1 }
END    { print nlines }

9. 最も大きい第1欄とそれを含む行を印字する($1のどれかは正であると仮定する)

$1 > MAX { max = $1; maxline = $0 }
END      { print max, maxline }

10. 少なくとも1つの欄を持つすべての行を印字する

NF > 0

11. 80文字以上の長さを持つすべての行を印字する

length($0) > 80

12. それぞれの行の欄の数とその行自体を印字する

{ print NF, $0 }

13. 任意の行の最初の2つの欄を逆順で印字する

{ print $2, $1 }

14. すべての行を最初の2つの欄を交換して印字する

{ temp = $1; $1 = $2; $2=temp; print }

15. すべての行を最初の欄を行番号に置き換えて印字する

{ $1 = NR; print }

16. すべての行を2つ目の欄を消去して印字する

{ $2 = ""; print }

17. すべての行の欄を逆順で印字する

{ for (i = NF; i > 0; i = i - 1)printf("%s", $i)
  printf("\n")
}

18. すべての行の各欄の合計を印字する

{ sum = 0
  for (i =1; i <= NF; i = i + 1) sum = sum + $i
  print sum
}

19. すべての行のすべての欄を合計して、その値を印字する

    { for (i = 1; i <= NF; i = i + 1) sum = sum + $i }
END { print sum }

20. 各欄の値を絶対値に置き換えてからすべての行を印字する

{ for (i =1; i <= NF; i= i + 1) if ($i < 0) $i = -$i
  print
}

参考書籍

プログラミング言語AWK (A.V.エイホ、P.J.ワインバーガー、B.W.カーニハン、足立 高徳(訳))

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?