サーチ…


構文

  • インデックス(大、小)
  • 長さまたは長さ()
  • 長さ(文字列)
  • マッチ(文字列、正規表現)
  • 分割(文字列、配列、セパレータ)
  • 分割(文字列、配列)
  • sprintf(形式、...)
  • sub(正規表現、subst、文字列)
  • sub(正規表現、subst)
  • gsub(正規表現、subst)
  • gsub(正規表現、subst、文字列)
  • substr(文字列、開始、終了)
  • substr(文字列、開始)
  • tolower(文字列)
  • toupper(文字列)

パラメーター

パラメータ詳細
大きい 「少し」スキャンされた文字列。
終わりサブ文字列を終了するインデックス。
フォーマット printf形式の文字列。
少し "big"でスキャンする文字列。
正規表現 拡張正規表現
開始サブ文字列を開始するインデックス。
文字列文字列。
subst 一致した部分を置換する文字列。

文字列を大文字に変換する

関数toupperは、文字列を大文字に変換します(大文字)。例えば:

BEGIN {
    greeting = "hello"
    loud_greeting = toupper(greeting)
    print loud_greeting
}

このコードは実行時に "HELLO"を出力します。

文字列連結

文字列の連結は、演算子を使用せずに式を互いに隣接して書くだけで簡単に行えます。例えば:

BEGIN {
   user = "root"
   print "Hello "user "!"
}

Hello root!

式は空白で区切る必要はないことに注意してください。

文字列のハッシュを計算する

awkでの標準ハッシュアルゴリズムの実装はおそらく面倒な作業ですが、テキスト文書のハンドルとして使用できるハッシュ関数を定義することははるかに扱いやすいものです。このような関数が有用である実用的な状況は、長い記述を提供するのではなく、短いidをアイテムの参照としてユーザに与えるために、その記述を与えられたアイテム、例えばテストケースに短いIDを割り当てることである。

ハッシュ関数は、文字を数値コードに変換する必要があります。これは、スクリプトの先頭で初期化されたルックアップテーブルを使用して行います。 ハッシュ関数は、モジュラ算術変換を使用して計算されます。モジュラ算術変換は、ハッシュの計算に対する非常に古典的なアプローチです。

デモの目的で、入力行をハッシュで修飾するルールを追加しますが、このルールは関数を使用するためには必要ありません。

BEGIN{
  for(n=0;n<256;n++) {
    ord[sprintf("%c",n)] = n
  }
}

function hash(text, _prime, _modulo, _ax, _chars, _i)
{
  _prime = 104729;
  _modulo = 1048576;
  _ax = 0;
  split(text, _chars, "");
  for (_i=1; _i <= length(text); _i++) {
    _ax = (_ax * _prime + ord[_chars[_i]]) % _modulo;
  };
  return sprintf("%05x", _ax)
}

# Rule to demonstrate the function
#  These comments and the following line are not relevant
#  to the definition of the hash function but illustrate
#  its use.

{ printf("%s|%s\n", hash($0), $0) }

上記のプログラムをhash.awkというファイルに保存し、それを古典的な英語の書籍タイトルの短いリストに示します:

awk -f hash.awk <<EOF
Wuthering Heights
Jane Eyre
Pride and Prejudice
The Mayor of Casterbridge
The Great Gatsby
David Copperfield
Great Expectations
The Return of the Soldier
Alice's Adventures in Wonderland
Animal Farm
EOF

出力は

6d6b1|Wuthering Heights
7539b|Jane Eyre
d8fba|Pride and Prejudice
fae95|The Mayor of Casterbridge
17fae|The Great Gatsby
c0005|David Copperfield
7492a|Great Expectations
12871|The Return of the Soldier
c3ab6|Alice's Adventures in Wonderland
46dc0|Animal Farm

私の好きな小説の6948の非空白行のそれぞれに適用すると、このハッシュ関数は衝突を生成しません。

文字列を小文字に変換する

AWKは、文字列のリストを含むファイル全体を操作するためによく使用されます。 awk_test_file.txtファイルに以下が含まれているとしましょう:

First String
Second String
Third String

すべての文字列を小文字に変換するには:

awk '{ print tolower($0) }' awk_test_file.txt

結果は次のようになります。

first string
second string
third string

文字列のテキスト置換

SUB関数は、awkの中のテキストを置換することを可能にする

サブ(正規表現、置換、ターゲット)

regexpは完全な正規表現である可能性があります

$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG

部分文字列抽出

GNU awkは、メインストリングから固定長文字シーケンスを返すサブストリング抽出機能をサポートしています。構文は次のとおりです。

*substr(string, start [, length ])* 

ここで、 stringはソース文字列で、 startは任意の長length文字に対して抽出を実行するサブ文字列の位置のstart示します。長さが指定されていない場合、抽出は文字列の最後まで行われます。

文字列の最初の文字は文字番号1として扱われます。

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3, 4)    # Start at character 3 for a length of 4 characters
    print substring
}'

サブストリングTESTを出力します。

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3)    # Start at character 3 till end of the string
    print substring
}'

文字位置3から文字列全体の終わりまでサブ文字列を抽出し、 TESTstring返しTESTstring

注意:-

  • 場合start負の値が与えられ、 GNU AWKは、文字列全体を印刷した場合length与えられ、非ゼロ値GNU AWKの動作は戻りnull文字列と動作が異なる実装の間で変化するawk


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow