タグ付けされた質問 「printf」

データをフォーマットして出力するシェル組み込みコマンド。printfコマンドを扱う質問、またはプログラミング言語(awk、PHP、perl、C ++など)によるprintf構文を広く使用する質問

4
なぜprintfはechoよりも優れているのですか?
私はそれprintfがより良いと聞いたことがありますecho。RHEL 5.8の一部のプログラムにテキストを入力するprintfために動作echoしなかったため、使用しなければならなかった私の経験から1つのインスタンスのみを思い出すことができますprintf。しかし、明らかに、他にも違いがあるので、それらの違いや、一方を使用する場合と特定の場合を使用する場合について質問したいと思います。

2
なぜprintfは「縮小」ウムラウトですか?
次の簡単なスクリプトを実行すると: #!/bin/bash printf "%-20s %s\n" "Früchte und Gemüse" "foo" printf "%-20s %s\n" "Milchprodukte" "bar" printf "%-20s %s\n" "12345678901234567890" "baz" 以下を印刷します: Früchte und Gemüse foo Milchprodukte bar 12345678901234567890 baz つまり、ウムラウト付きのテキスト(などü)は、ウムラウトごとに1文字ずつ「縮小」されます。 確かに、どこかに間違った設定がありますが、どの設定が可能なのかわかりません。 これは、ファイルのエンコードがUTF-8の場合に発生します。 エンコーディングをlatin-1に変更すると、配置は正しくなりますが、ウムラウトは正しくレンダリングされません。 Fr�chte und Gem�se foo Milchprodukte bar 12345678901234567890 baz
54 bash  unicode  printf 

5
3列に出力を印刷します
MYPATH=/var/www/html/error_logs/ TOTALFILE=$(ls $MYPATH* | wc -l) FILETIME=$(stat --format=%y $MYPATH* | head -5 | cut -d'.' -f1) FILE=$(ls -1tcr $MYPATH* | head -5 | rev | cut -d/ -f1 | rev) TOPLINE=$(head -1 $MYPATH* | grep -Po '".*?"' | head -5) この5つのファイル情報をヘッダー付きの列にエレガントに印刷するにはどうすればよいですか? FILE CREATED TIME | FILE NAME | ERROR HEADER …

3
幅のawk printf番号と切り上げ
私は数字をprintfする必要がありますが、与えられた幅と丸みを帯びています(awk!で) %10s 私はこれを持っていますが、どうにかして接続する必要%dがありますが、私が行うすべてのものは、awkにはあまりにも多くのパラメータになります(私はより多くの列があるため)。
20 scripting  awk  printf 

2
一部のUnicode文字が端末に印刷されないのはなぜですか?
Adobe Source Code Proフォントを使用した単純な端末でArch Linuxを実行しています。ロケールが正しく設定されていLANG=en_US.UTF-8ます。 トランプを表すUnicode文字を端末に印刷したい。参考としてウィキペディアを使用しています。 カードスーツのUnicode文字は正常に機能します。たとえば、発行 $ printf "\u2660" 画面に黒いハートを印刷します。 しかし、特定のトランプで問題があります。発行中 $ printf "\u1F0A1" Ἂ1スペードaceのエースの代わりにシンボルを表示します。何が悪いの? この問題は、いくつかの端末(urxvt、xterm、シロアリ)および私が試したすべてのフォント(DejaVu、Inconsolata)で持続します。
16 bash  fonts  unicode  printf 

3
yashシェルのprintfが組み込みコマンドであるかどうかについて少し混乱しています
yashシェルがありprintf、内蔵してそのマニュアルに従って。 しかし、これはyashデフォルト設定のシェルで見られるものです: kk@eeyore ~ $ command -v printf /usr/bin/printf kk@eeyore ~ $ type printf printf: a regular built-in at /usr/bin/printf されたprintfビルトインこのシェルではありませんか?結果は、外部コマンドとしても利用可能な、他の多くの組み込みユーティリティと同様です。 比較として、pdksh(kshOpenBSDでは、組み込みでprintfはありません): $ command -v printf /usr/bin/printf $ type printf printf is /usr/bin/printf そして中bash(ここprintf でビルトイン): $ command -v printf printf $ type printf printf is a shell builtin

6
パターンを見つけた後にのみ出力を印刷する
echoerたくさんの情報を画面に表示するスクリプト(呼び出しましょう)があります。パターンが見つかった後にのみ行を表示できるようにしたいと思います。 私は次のようなソリューションの使用を想像します echoer | solution_command <pattern> 理想的にpatternは正規表現になりますが、ハードバリュー文字列で十分です。
13 echo  printf 

1
Bashが整数ではなく8進コードを解釈しないようにするにはどうすればよいですか?
私はHoroscope RSSスクリプトをUnix / Linuxプロジェクトのイントロとして書いていますが、授業後に留まることができたときに教授が解決できない問題に遭遇しました。実際の日付をチェック対象として使用する方法がわからなかったため、ユーザー入力にMMDD形式の標準的な数値を入力して基本的な算術を試してみると思いました。彼によると、スクリプトは入力を整数ではなく8進コードとして読み取っているようです。スクリプトのサンプルを次に示します。 elif [ "$olddate" -gt 1121 ] && [ "$olddate" -lt 1131 ] || [ "$olddate" -gt 1200 ] && [ "$olddate" -lt 1222 ] then echo "You are Sagittarius" exit elif [ "$olddate" -gt 1221 ] && [ "$olddate" -lt 1232 ] || [ "$olddate" -gt …

6
文字列の末尾の空白を別の文字で埋める
hello world20文字以上出力したいです。 printf "%-20s :\n\n" 'hello world!!' # Actual output hello world!! : # Wanted output hello world!!========: ただし、スペースで補完するのではなく、代わりに「=」で補完します。それ、どうやったら出来るの?
12 bash  shell  string  printf 


5
bash +特殊な形式で印刷するためにprintfを使用
Linuxマシンのリストでpingアクセスを確認するために、次のbashスクリプトを作成しました。 for M in $list do ping -q -c 1 "$M" >/dev/null if [[ $? -eq 0 ]] then echo "($C) $MACHINE CONNECTION OK" else echo "($C) $MACHINE CONNECTION FAIL" fi let C=$C+1 done これは印刷します: (1) linux643 CONNECTION OK (2) linux72 CONNECTION OK (3) linux862 CONNECTION OK (4) linux12 CONNECTION …

1
printfはどのように半分を小数点第1位に四捨五入しますか?
printf私のシステムではprintf (GNU coreutils) 8.26、とにバンドルされているバージョンの2つの異なる実装をテストしていzsh 5.3.1ます。半数がどのように丸められるか、つまり1.5、2.5、3.5、…9.5をテストしています。 $ for i in {1..9}; do /usr/bin/printf '%.0f\n' "${i}.5"; done 2 2 4 4 6 6 8 8 10 $ for i in {1..9}; do printf '%.0f\n' "${i}.5"; done 2 2 4 4 6 6 8 8 10 ここでは、どちらも明らかに半分に丸めています。しかし、小数点以下第1位までの丸めをテストすると、混乱が生じます。つまり、1.15、1.25、1.35、…1.95をテストしています。 $ for i in {1..9}; do …
11 printf  math 

4
awkを使用して、可変数のフィールドを持つファイルの最初の列の幅を変更します
awkのprintf関数の使用方法は理解していますが、すべてのフィールドを指定する必要はありません。 たとえば、これが私のファイルだとします。 c1|c2|c3|c4|c5 c6|c7|c8|c9|c10 c11|c12|c13|c14|c15 すべてのレコードの最初のフィールドがc11の幅になるようにフォーマットします-最初のフィールドで最も長いセル: c1 |c2|c3|c4|c5 c6 |c7|c8|c9|c10 c11|c12|c13|c14|c15 指定できることを理解しています: awk -F"|" '{printf "%-3s%s%s%s%s\n", $1, $2, $3, $4, $5}' file > newfile 最初の列の幅を知りたいが、ファイル内のフィールド数がわからないとします。基本的に私は次のようなことをしたいです: ... '{printf "%-3s|", $1}' ...その後、残りのフィールドを元の形式で印刷します。

3
エスケープシーケンスを使用して制御文字を印刷する方法
tputを使用して赤を定義しました red=$(tput setaf 1) 私のプログラムの警告を色分けします。これはうまくいきます: printf '%sfail\n' "$red" # prints 'fail' in red ただし、次のようなエスケープシーケンスをそのまま出力したい場合があります。 \ E [31mfail どうすればいいですか?printfに%qフラグがあることは知っていますが、それは私がしたくない他のものをエスケープします。

3
末尾の改行を削除せずにstdinを変数にキャプチャするにはどうすればよいですか?
シェルスクリプトで... 末尾の改行を削除せずにstdinを変数にキャプチャするにはどうすればよいですか? 今私は試しました: var=`cat` var=`tee` var=$(tee) すべての場合$varにおいて、入力ストリームの末尾の改行はありません。ありがとう。 また、入力に後続の改行がない場合、ソリューションは追加しません。 承認された回答に照らして更新: 私のコードで使用した最終的な解決策は次のとおりです。 function filter() { #do lots of sed operations #see https://github.com/gistya/expandr for full code } GIT_INPUT=`cat; echo x` FILTERED_OUTPUT=$(printf '%s' "$GIT_INPUT" | filter) FILTERED_OUTPUT=${FILTERED_OUTPUT%x} printf '%s' "$FILTERED_OUTPUT" 完全なコードを確認したい場合は、エキスパンダーのgithubページを参照してください。エキスパンダーは、情報セキュリティの目的で開発した小さなオープンソースのgitキーワード展開フィルターシェルスクリプトです。.gitattributesファイル(ブランチ固有にすることができます)およびgit configで設定されたルールに従って、git は、リポジトリにチェックインまたはチェックアウトするたびに、expandr.shシェルスクリプトを介して各ファイルをパイプ処理します。(そのため、末尾の改行またはその欠如を保持することが重要でした。)これにより、機密情報をクレンジングし、テスト、ステージング、およびライブブランチの環境固有の値の異なるセットを交換できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.