AWK:特定のパターンを含まない特定の行を削除する方法は?

AWK:特定のパターンを含まない特定の行を削除する方法は?

スペース - ダッシュ - スペースで区切られたさまざまな英数字文字列を含むファイルがあります。ただし、英数字と区切り文字のみがあり、他の文字列値が欠落している行がいくつかあります。例:

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -

上記の例の最後の2行には、区切り文字の右側に英数字文字列がありません。これを削除したいと思います。次のawk式を試してみました。

awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt

私の!/* - /言葉は、「文字(*)の後にスペース - ダッシュスペース( - )があり、その後に何もないパターンを見つけることです。そのようなパターンが見つからない場合は(!)」、残りの行を一時的に移動します。 。 txt ファイルを作成し、sourcefile.txt コンテンツを temp.txt コンテンツに置き換えます。しかし、上記のawkスクリプトを実行すると、sourcefile.txtの内容には何も起こりません。すべてが同じままです。私もエラーは発生しません。ここで何が間違っている可能性がありますか?上記の例の行が与えられたら、awkスクリプトを実行した後、必要な出力は次のようになります。

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

ベストアンサー1

英数字で終わる行を印刷する方法は簡単です。

$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

おすすめ記事