awkは、他の一致前の最後のレコードである場合にのみ一致を印刷します。

awkは、他の一致前の最後のレコードである場合にのみ一致を印刷します。

ファイルの最後の行が定数テキストの前にある場合は、特定のパターンに一致する項目を印刷するためにawkを使用したいと思います。

たとえば、「c」の値が定数テキストの前の最後の行である場合にのみ印刷したいと思います。

cat file.txt:
a=1
b=2
c=3
...constant text...

3を印刷します。

cat file.txt:
a=1
c=3
b=2
...constant text...

何も印刷しないでください。

どうすればいいですか? awkはそれがファイルの最後の番号であるかどうかをどうやって知ることができますか?

ベストアンサー1

ファイルの最後の行が定数テキストの前にある場合は、特定のパターンに一致する項目を印刷するためにawkを使用したいと思います。

この場合は、次のことを試してください。

awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file

はい

$ cat file1 
a=1
b=2
c=3
...constant text...
$ awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file1
3
$ cat file2
a=1
c=3
b=2
...constant text...
$ awk -F= '/constant text/ && name=="c"{print value} {name=$1;value=$2}' file2
$ 

どのように動作しますか?

  • -F=

    これは、フィールド区切り文字awkとして使用することを意味します。=これによりa=1、または同じフィールドの名前と値を分離できますc=3

  • /constant text/ && name=="c"{print value}

    constant textand name(前の行の最後に設定されているように)がある行に達すると、をc印刷しますvalue

  • name=$1;value=$2

    現在の行の場合は、最初のフィールドをとして保存し、name2番目のフィールドをとして保存しますvalue

おすすめ記事