awk を使用して出力ラインの行番号を印刷します。

awk を使用して出力ラインの行番号を印刷します。

コンテキスト:ファイルの異なる行で複数の文字列を検索するには、grepを使用します(つまり、行ベースの検索ではなくファイル全体)。

egrep -nH 'Dansk|Norsk|Svenska' file3

または使用リップグレップ

rg  'Dansk|Norsk|Svenska' file3

しかし答えはあります

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}END{ if (a && b && c) print $0 }'  file3

私は理解できません。これ答え。

わかりましたawk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}

私の考えでは今問題はawkを使用し、パターンマッチング時に出力ラインを使用してライン番号を印刷することです。

更新:私も知っているこれ答え。アップデート:
ほぼ終了:

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1'  file3

それは戻ってくる

Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
        Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,

期待収益率は

   Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,

file3コンテンツ:

Disc Title: unknown
Title: 01, Length: 01:33:37.000 Chapters: 33, Cells: 31, Audio streams: 04, Subpictures: 20
        Subtitle: 01, Language: ar - Arabic, Content: Undefined, Stream id: 0x20, 
        Subtitle: 02, Language: bg - Bulgarian, Content: Undefined, Stream id: 0x21, 
        Subtitle: 03, Language: cs - Czech, Content: Undefined, Stream id: 0x22, 
        Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23, 
        Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24, 
(...)

直す。ほぼ近いです。
awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print NR, $0}' file3 しかしそれは戻ってくる

6         Subtitle: 04, Language: da - Dansk, Content: Undefined, Stream id: 0x23,
7         Subtitle: 05, Language: de - Deutsch, Content: Undefined, Stream id: 0x24,
8 (...)

ベストアンサー1

awk は一対の条件とアクションで構成されます。条件部分は、算術式またはパターンマッチング、または1つ以上の式の結果であり、すべてtrueまたはfalseステートメントです。

ここで与えられたサンプルは、一対のパターンマッチングと操作を使用します。つまり、

awk '/if-this-regex-exist-in-current-line/ { "yes, so do something" }' infile

3つすべてが同じパターンマッチングを実行し、これらの正規表現が1行にある場合は一時変数フラグを設定します。

次に、入力infileファイルのすべてのレコード/行を処理し、一度だけ実行されるEND {}ブロックですべてのフラグが設定されていることを確認します(3つのパターンがすべて見つかったか、単一パターンパターンで見つかったことを意味します)。 )行またはwhile入力ファイルから)その後、印刷します。最後の行(FILENAMEなどを印刷したい場合があります)入力ファイル。


2番目の追加の質問に答えるには:

awk '/Dansk/{a=1}/Norsk/{b=1}/Svenska/{c=1}{ if (a || b || c ) print $0; next}1' file3

これは、DanskまたはNorsk1つ以上を含む行を印刷し、それ以外の場合はコマンドが実行するすべての操作を書き込むことSvenskaができる行を印刷します。awk 1 infilecat infile

Inはx ||y ||z || ...「x OR y OR z OR ...のうち少なくとも1つがTrueの場合」を意味し、inは「x && y && z &&...x AND y AND z AND ...すべてがTrueの場合」を意味し、「true」を意味するします。 true と評価される式または条件の結果です。

おすすめ記事