このawkスクリプトは何をしますか?

このawkスクリプトは何をしますか?

これは何をしますか?

( awk '{ if (NR > 1) print prev " " $1; prev = $1; }' file)

答え1

それはawkスクリプトです。awkはプログラミング言語ですフィールドで区切られたデータを処理するのに特に適しています。スクリプト自体は非常に簡単です。

  • if (NR > 1):現在の入力行の行番号を保持するNR特殊変数です。awkしたがって、これは、「現在行番号が1より大きい場合」、つまり「最初の行を除くすべての行について」を意味します。
  • print prev " " $1;NR:と同じですが、$1行の最初のフィールドを保持する特殊変数でもあります。フィールドは空白として定義されているため(デフォルトでを使用して変更できます)、will be、will beなどの行-Fが提供されます。したがって、これは変数値(次の点を参照)、空白()、現在の行の最初のフィールドを印刷します。foo bar$1foo$2barprev" "
  • prev = $1;:この行の最初のフィールドを変数に保存しますprev。したがって、次の行を処理するときは、prev前の行の最初のフィールドがあります。

その機能を確認するには、テスト入力で試すことができます。たとえば、seq 5whichを使用して1から5までの数字を印刷します。


$ seq 5
1
2
3
4
5
$ seq 5 | awk '{ if (NR > 1) print prev " " $1; prev = $1; }'
1 2
2 3
3 4
4 5

上記のように、awkスクリプトは前の行の最初のフィールドを印刷し、現在の行の最初のフィールドを印刷します。

答え2

入力ファイルがスペースで区切られたファイルであるとします。ここで提供されるコードはファイル全体を読み込み、1行の最初の列値のみを出力します。

たとえば、次のようinput.txtになります。 -

AAA 4443
BBB 5595
CCC 4949
DDD 4434

スクリプトawkは以下を出力します。

AAA BBB
BBB CCC
CCC DDD
DDD

最初の行を読み取ると、最初の行の最初の列であるAAAが変数に保存されますprev。 2行目を読むと、prevの値、つまりが印刷され、AAA2行目の最初の列が印刷されますAAA BBB。これでBBB変数に保存されますprev。 3行目を読むと印刷されますBBB CCC。 4行目を読むと印刷されますCCC DDD

関連情報