この初心者向けガイドでは、 awk
の非常に基本的なことを学びます。 指図。また、テキストを処理するときに使用できるいくつかの方法もわかります。
始めましょう!
awk
とは コマンド?
awk
はスクリプト言語であり、コマンドラインで作業するときに役立ちます。また、テキスト処理に広く使用されているコマンドです。
awk
を使用する場合 、提供するパターンに基づいて、データ(1つ以上の個別のテキスト)を選択できます。
たとえば、 awk
で実行できる操作の一部 与えられたテキストの中で特定の単語やパターンを検索している、あるいは提供したファイルの特定の行や特定の列を選択している。
awk
の基本構文 コマンド
最も単純な形式では、 awk
コマンドの後には、検索するファイルの名前が最後に記載された、一重引用符と中括弧のセットが続きます。
次のようになります:
awk '{action}' your_file_name.txt
特定のパターンを持つテキストを検索する場合、またはテキスト内の特定の単語を検索する場合、コマンドは次のようになります。
awk '/regex pattern/{action}' your_file_name.txt
コマンドラインでファイルを作成するには、 touch
を使用します 指図。
例: touch filename.txt
ここで、 filename
、はファイルの名前です。
その後、 open
を使用できます コマンド( open filename.txt
)、テキストエディットなどのワードプロセッサプログラムが開き、ファイルの内容を追加できます。
したがって、テキストファイル information.txt
があるとします。 、異なる列に分割されたデータが含まれています。
ファイルの内容は次のようになります。
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
私の例では、 firstName
の列が1つあります 、 lastName
、 age
、 city
、および ID
。
cat text_file
と入力すると、いつでもファイルの内容の出力を表示できます。 、ここで text_file
ファイルの名前です。
awk
を使用してファイルのすべてのコンテンツを印刷する方法
すべてを印刷するには ファイルの内容、中括弧内で指定するアクションは print $ 0
です。 。
これは、 cat
とまったく同じように機能します 前述のコマンド。
awk '{print $0}' information.txt
Ouptut:
fristName lastName age city ID
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Wood Tinker 54 Lisbon N/A
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
各行に行番号をカウントする場合は、 NR
を使用します。 組み込み変数:
awk '{print NR,$0}' information.txt
1 fristName lastName age city ID
2
3 Thomas Shelby 30 Rio 400
4 Omega Night 45 Ontario 600
5 Wood Tinker 54 Lisbon N/A
6 Giorgos Georgiou 35 London 300
7 Timmy Turner 32 Berlin N/A
awk
を使用して特定の列を印刷する方法
awk
を使用する場合 、印刷する特定の列を指定できます。
最初の列を印刷するには、次のコマンドを使用します:
awk '{print $1}' information.txt
Ouput:
Thomas
Omega
Wood
Giorgos
Timmy
$ 1
最初のフィールド、この場合は最初の列を表します。
2番目の列を印刷するには、 $ 2
を使用します :
awk '{print $2}' information.txt
出力:
lastName
Shelby
Night
Tinker
Georgiou
Turner
awk
の方法 デフォルトでは、各列の開始位置と終了位置をスペースで決定します。
複数の列(たとえば、最初と4番目の列)を印刷するには、次のようにします。
awk '{print $1, $4}' information.txt
Ouput:
fristName city
Thomas Rio
Omega Ontario
Wood Lisbon
Giorgos London
Timmy Berlin
$ 1
最初の入力フィールド(最初の列)と $ 4
を表します 4番目を表します。それらをコンマで区切ります。$1、$ 4
、したがって、出力にはスペースがあり、読みやすくなります。
最後のフィールド(最後の列)を印刷するには、 $ NF
を使用することもできます これは最後を表します レコードのフィールド:
awk '{print $NF}' information.txt
出力:
ID
400
600
N/A
300
N/A
選択した列から印刷する行を指定することもできます:
awk '{print $1}' information.txt | head -1
Ouput:
FirstName
そのコマンドを分解してみましょう。 awk'{print $ 1}' information.txt
最初の列を印刷します。次に、そのコマンドの出力(前に見た)がパイプem>されます 、パイプ記号 |
を使用 、headコマンドに、その -1
引数は列の最初の行を選択します。
2行を印刷したい場合は、次のようにします。
awk '{print $1}' information.txt | head -2
出力:
FirstName
Dionysia
awk
で特定のパターンの線を印刷する方法
開始の行を印刷できます 特定の文字で。
例:
awk '/^O/' information.txt
出力:
Omega Night 45 Ontario 600
このコマンドは、開始するテキストを含む行を選択します O
を使用 。
上矢印記号( ^
)を使用します )最初に、行の先頭を示し、次に行を開始する文字を示します。
終了する行を印刷することもできます 特定のパターンで:
awk '/0$/' information.txt
出力:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
これにより、 0
で終わる行が出力されます。 – $
記号は、行の終わり方を示すために文字の後に使用されます。
そのコマンドは次のように変更することもできます:
awk '! /0$/' information.txt
!コード>
NOT
として使用されます したがって、この場合は、 0
で終わらない行を選択します。 。
fristName lastName age city ID
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
awk
で正規表現を使用する方法
特定の文字を含む単語を出力し、指定したパターンに一致する単語を印刷するには、スラッシュ //
を再度使用します。 、前に示しました。
on
を含む単語を検索する場合 、あなたはそうするでしょう:
awk ' /io/{print $0}' information.txt
出力:
Thomas Shelby 30 Rio 400
Omega Night 45 Ontario 600
Giorgos Georgiou 35 London 300
これは、 io
を含むすべてのエントリに一致します 。
余分な列があったとしましょう–部門
列:
fristName lastName age city ID department
Thomas Shelby 30 Rio 400 IT
Omega Night 45 Ontario 600 Design
Wood Tinker 54 Lisbon N/A IT
Giorgos Georgiou 35 London 300 Data
Timmy Turner 32 Berlin N/A Engineering
IT
で働く人々のすべての情報を見つけるため 、スラッシュの間に検索する文字列 //
を指定する必要があります :
awk '/IT/' information.txt
出力:
Thomas Shelby 30 Rio 400 IT
Wood Tinker 54 Lisbon N/A IT
IT
で働いている人の名前と名前だけを表示したい場合はどうでしょうか。 ?
次のように列を指定できます:
awk '/IT/{print $1, $2}' information.txt
出力:
Thomas Shelby
Wood Tinker
これにより、 IT
の最初と2番目の列のみが表示されます すべてのフィールドを表示する代わりに、が表示されます。
特定のパターンの単語を検索する場合、次のようにエスケープ文字を使用する必要がある場合があります。
awk '/N\/A$/' information.txt
出力:
Wood Tinker 54 Lisbon N/A
Timmy Turner 32 Berlin N/A
パターンN/ A
で終わる行を見つけたかった 。
したがって、'//'
間を検索する場合 これまでに示したように、エスケープ文字( \
)を使用する必要がありました ) N / A
の間 、そうでないとエラーが発生します。
awk
で比較演算子を使用する方法
たとえば、 40
未満の従業員のすべての情報を検索したい場合 、<
を使用します そのような比較演算子:
awk '$3 < 40 { print $0 }' information.txt
出力:
Thomas Shelby 30 Rio 400
Giorgos Georgiou 35 London 300
Timmy Turner 32 Berlin N/A
出力には、40歳未満の人の情報のみが表示されます。
そして、あなたはそれを持っています!これで、 awk
での作業を開始するための絶対的な基本がわかりました。 テキストデータを操作します。
Linuxの詳細については、freeCodeCampにさまざまな学習資料が用意されています。
始めるためのいくつかを次に示します。
- Linuxの基本-ハンズオンワークショップ
- 倫理的ハッカーのためのLinux(Kali Linuxチュートリアル)
- Linuxコマンドハンドブック
読んでくれてありがとう😊