cshスクリプトをbashに翻訳していますが、次のような行が見つかりました。
@ lines = `grep num_lines ../config.txt | awk '{printf("%d",int($2))}' `
ここで「@」は何をしますか?私は少し見つけました。文書「@」を式として csh を宣言します。しかし、これは私に一般的な変数割り当てのようです。 bashでコードのgrepとawk部分を実行すると、出力は "%d 12045"のように "%d"の前にある整数です。
ベストアンサー1
まあ、このスクリプトを書いた人が何を考えたのかを知ることは不可能です。しかし、以下はいくつかの観察事項です。
awk
コマンドが表示されると、printf
入力行に2番目の文字列の整数値が印刷されます。- 〜のようにエマルオコメント私がレビューしたように、
awk
それは非常に強力なプログラムです。grep
、または他のものとsed
一緒に実行する必要はほとんどありませんawk
。だからgrep num_linesファイル名| awk '{ printf("%d", int($2)) }'
次のように書くことができますawk '/num_lines/ { printf("%d", int($2)) }'ファイル名
- 上記のよう
int($2)
に整数部分 入力行の 2 番目の文字列値です。したがって、プロファイルにとマークされている場合を取得num_lines foo
します0
。適切な形式の構成ファイルを使用すると、そのような予防措置を講じる必要はないようです。num_lines 3.14
3
- いずれにせよ、
printf("%d", int($2))
受け入れられない私が知る限り、printf("%d", $2)
そして整数印刷($2)
(ほぼ)同じです。 - 私が確認できる1つの違いは、この
printf
バージョンは最後に改行文字を書き込まないことです。$ echo "num_lines 42" awk '{printf("%d", $2)}'; 日付 422019年5月13日月曜日午前12:00:00 $ echo "num_lines 42" awk '{print int($2)}';日付 42 2019年5月13日月曜日午前12:00:01
`…`
ただし、末尾の改行文字が削除されるため、これは実際には関係ありません。 - 「これは私に一般的な変数割り当てのように見えます」と言います。しかし、[t]cshユーザーはこれが許可されていないことを知っています。
変える=値
あなたは言わなければなりません置く 変える=値
または@ 変える=表現
もちろん、単純な整数定数も有効です。expr
、 したがって、著者はおそらくより短く、値が整数であることを知っているので、@
代わりに使用したでしょう。set
したがって、このステートメントは変数をlines
fromの値に設定します。num_lines
../config.txt