とても簡単です。ファイルには次のテキストがあります。
#number
3222
#number
3311
私は以下を使用しています:
awk '{印刷長}' file.txt
次のように印刷されます。
7
4
7
4
しかし、私は数字の長さを印刷し、「#」で始まる行を無視して印刷したいと思います。
4
4
答え1
awk
最初の文字に次の行の長さだけを印刷するように指示します#
。
awk '!/^#/ { print length }' file
!/^#/
ブロックの前に正規表現一致テストがあります。パターンが^#
一致すると、次の関連付けブロックは次のようになります。いいえ(一致の意味が変わるので!
)考慮されます。
このパターンは、現在の行の先頭でaを^#
一致させようとします。#
または、数字のみを含む行の長さを出力したい場合:
awk '/^[[:digit:]]+$/ { print length }' file
始まりと終わりにアンカーがあるため、このパターンは^[[:digit:]]+$
1つの連続した数字で構成される行にのみ一致します。数字以外の文字を含む行を避けるためにも使用できます。^
$
!/[^[:digit:]]/
またはすぐに次の行の長さだけを出力します#number
。
awk '$0 == "#number" { getline; print length }' file
ここでは、現在の行と文字列の比較を行います。正確に #number
(質問のサンプルデータに示すように)次の行を読み、getline
その長さを出力します。