スペース - ダッシュ - スペースで区切られたさまざまな英数字文字列を含むファイルがあります。ただし、英数字と区切り文字のみがあり、他の文字列値が欠落している行がいくつかあります。例:
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
答え2
より簡単です:
awk '$3' inputfile
これはの略ですawk '$3!=""'
、これはの略です、これはの略ですawk '$3!=""{print}'
、これはの略ですawk '$3!=""{print $0}'
参考までに:
sed /-$/d
おそらくより速く、grep -ve '-$'
より速いでしょう。
答え3
@guillermo chamorroの提案のおかげで、目的の結果を得るために、次のようにスクリプトを変更できました。
awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
ギルエルモに感謝します。