私はいくつかのスクリプトを書いていますが、いくつかのコマンドが見つかりました。既存のテキスト内の特定の場所にいくつかの文字列(月)を入れたいです。例:
Left Right
左と右の間にテキストを置くには?印刷しようとしましたが、必要に応じて印刷されません。
date +'%b' | awk '{print "Left " $1} {print "Right"}'
追加したくない新しい行が追加されます。
Left Jun
Right
答え1
date "+Left %b Right"
date
コマンド自体の適切な場所に文字列を配置できます。オペレーティングシステム全体で確認されていませんがGNU date
。
答え2
print
これは、コマンドがデフォルトawk
で改行文字を挿入するためです。print
1回の呼び出しのみを使用して、内容全体を一度に印刷できます。
$ 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" }'