私は ".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
^M
LF
\n
$
バラより私のツール出力がそれ自体で上書きされる理由と回避策DOS行の終わりとそのファイルに対してUnixツールを実行したい場合は、それを解決する方法に関する詳細情報。