GNU awkが期待どおりに機能しない

GNU awkが期待どおりに機能しない

私は ".awk"ファイルを使用する必要があるawkチュートリアルに従います。 awkが期待どおりに機能しないため、使用に問題があります。これが私が使用するコードです。 virt.awkファイルの内容

BEGIN { RS="\n\n" ; }
$0 ~ search { print }

これで予想される結果は、パターンを検索すると特定の履歴が表示されることです。しかし、以下を試してみると、ファイル全体が表示されます。

私が使用するコマンドは次のとおりです。

awk -f virt.awk search=domain1 virtualhosts.conf

クエリに何を使用しても、ファイル全体を印刷します。ドメイン1、ドメイン2、ドメイン3などのすべてのエントリ。誰でも助けることができますか?

注:これはvirtualhosts.confファイルのコピーにすぎず、まったく同じ形式で事前フォーマットされています。つまり、各項目の後には空白行があり、その間には他の空白行はありません。

virtualhost.confの内容:(そして常に得られる結果):

<VirtualHost 172.20.30.40:80>
DocumentRoot "/www/domain1"
ServerName www.domain1.com
#Other options
</VirtualHost>

<VirtualHost 172.20.30.40:8080>
DocumentRoot "/www/domain2"
ServerName www.domain2.com
#Other options
</VirtualHost>

<VirtualHost 172.20.30.50:80>
DocumentRoot "/www/domain3-80"
ServerName www.domian3.org
#Other options
</VirtualHost>

<VirtualHost 172.20.30.50:8080>
DocumentRoot "/www/example2-8080"
ServerName www.example.org
#Other options
</VirtualHost>

追加の詳細:mawkを使用していることを発見し、gawkをインストールしましたが、まだ同じ結果を得ました。私はpop-os 20.04とdash btwを使用しています(これが影響する場合)

user@pop-os:~/linuxwork$ which awk
/usr/bin/awk
user@pop-os:~/linuxwork$ ll /usr/bin/awk
lrwxrwxrwx 1 root root 21 Mar 30 21:10 /usr/bin/awk -> /etc/alternatives/awk*
user@pop-os:~/linuxwork$ ll /etc/alternatives/awk
lrwxrwxrwx 1 root root 13 Aug  6 20:21 /etc/alternatives/awk -> /usr/bin/gawk*
user@pop-os:~/linuxwork$

ベストアンサー1

\n\nファイルにsがなく、すべてsがあるため、入力ファイルにDOS行の終わりがあることはほぼ確実です\r\n\r\n。または(すべてのawksに移植可能にするために実際に使用する必要があるもの)RS="\n\n"に変更し、得られた出力を確認してください。RS=""RS="\r\n\r\n"RS="\r?\n\r?\n"

また、各行の終わりにcat -Ev virtualhost.confキャリッジリターン(==)と改行(==)があることを示すエントリを実行して見つけることもできます。^M$CR\r^MLF\n$

バラより私のツール出力がそれ自体で上書きされる理由と回避策DOS行の終わりとそのファイルに対してUnixツールを実行したい場合は、それを解決する方法に関する詳細情報。

おすすめ記事