このawkコマンドはどういう意味ですか? [閉鎖]

このawkコマンドはどういう意味ですか? [閉鎖]

このコマンドが何を意味するのかを説明してください。

awk 'BEGIN {while (getline < "list") list[$1]}; $1 in list'

ベストアンサー1

注文する

awk 'BEGIN {while (getline < "list") list[$1]}; $1 in list' somefilename

これは次のとおりです。

awk 'BEGIN {while (getline < "list") array[$1]} $1 in array' somefilename

(ここでは変数の名前を変更して重複listエントリarrayを削除しました;。)最初に名前付きファイルから読み込み、(または指定されていない場合は標準入力)から読み込み、list存在する最初の列のみを印刷します。このファイルの行は最初の列にあります。ファイルの 。somefilenamesomefilenamelist

「長い形式」で書かれたawkスクリプトは、次のように書くことができます。

#!/usr/bin/awk -f

# This block runs before processing input data.
BEGIN {
    # Read "list" line by line.
    while (getline <"list")
        array[$1] = 1  # Make an entry in the associative array
                       # with the first column as key.
}

# This block processes data.
# If the first column of the data is a key in the array, print the whole line.
$1 in array { print } 

簡単に言えば、これは2つのファイル間の最初の列に対する生のJOIN操作で、ファイルをソートする必要はありません(ソート順が維持されますsomefilename)。結果は、somefilename最初の列がの最初の列の1つと一致する行になりますlist

順序を(ほぼ)保存しない別の方法は次のとおりです。

join <( sort list ) <( sort somefilename )

結果は異なるようにソートされ、 のすべての列はlist出力の一部になります。どの列が必要かを知っている場合は、-oforフラグを使用してこの問題を解決できますjoin


$1スクリプトの2つの位置を$0(最初の列ではなくフル行)に変更すると、awkスクリプトは次のようになります。

grep -Fx -f list somefilename

ここで、ファイルはパターンリスト()listとして使用され、固定文字列()、フル行()、。grep-f list-F-xsomefilenamesomefilename

おすすめ記事