2つの単語の間に月を印刷します。

2つの単語の間に月を印刷します。

私はいくつかのスクリプトを書いていますが、いくつかのコマンドが見つかりました。既存のテキスト内の特定の場所にいくつかの文字列(月)を入れたいです。例:

Left Right 

左と右の間にテキストを置くには?印刷しようとしましたが、必要に応じて印刷されません。

date +'%b' | awk '{print "Left " $1} {print "Right"}'

追加したくない新しい行が追加されます。

Left Jun
Right

答え1

date "+Left %b Right"

dateコマンド自体の適切な場所に文字列を配置できます。オペレーティングシステム全体で確認されていませんがGNU date

答え2

printこれは、コマンドがデフォルトawkで改行文字を挿入するためです。print1回の呼び出しのみを使用して、内容全体を一度に印刷できます。

$ date +'%b' | awk '{print "Left " $1 " Right"}'
Left Jun Right

または以下を使用してくださいprintf

$ date +'%b' | awk '{printf "Left "; printf "%s", $1; printf " Right\n"}'
Left Jun Right

ここで使用することは意味がありませんprintf。単に例として使用し、\n基本的にaを追加しないことを示すためのものです。

答え3

あなたのawk行には実際には2つの別々のドアがあります。ここで手書きしています。

date +'%b' | awk '
    {print "Left " $1}
    {print "Right"}
'

すべての入力行に対して、すべてのawk文が評価され実行されます。これら2つのステートメントの前にはオプションの式はありません(たとえば、$1 == "apple" { print "I love fruit" }常に実行されます)。

したがって、各入力行(コマンドの単一行date)に対してgetを実行して{print "Left " $1}からgetを実行します{print "Right}。このprint文は、現在の値で出力を終了します。出力レコード区切り記号ORS変数)はデフォルトでは改行(NL)なので、2行の出力を取得します。

あるいは、1つのawkステートメントのみがあり、1つのprintステートメントのみを含むものを使用できるため、終了NLは1つだけです。

`date +'%b' | awk '{ print "Left", $1, "Right" }'

関連情報