「mysql」を「tail」にパイピングすると、出力形式が変わるのはなぜですか?

「mysql」を「tail」にパイピングすると、出力形式が変わるのはなぜですか?

MySQL Workbenchを使用して結果を表示する場合は、SELECT1つだけ正確です。\

max@host 10:13:58: ~$ mysql -h db-master.domain.local -uuser -ppw db -e '
>                 SELECT
>                 DISTINCT i.filesourceregexp
>                 FROM db.ImportLogFiles i'

+------------------------------------------------+
| filesourceregexp                               |
+------------------------------------------------+
| ^[0-9]{8}_1062355673_merge_google_pbn\.csv$    |
| ^[0-9]{8}_8026062435_merge_google_pbn\.csv$    |
| ^[0-9]{8}_1062355673_store_visits_report\.csv$ |
+------------------------------------------------+

max@host 10:14:10: ~$ mysql -h db-master.domain.local -uuser -ppw db -e '
                SELECT
                DISTINCT i.filesourceregexp
                FROM db.ImportLogFiles i' | tail -n +2
^[0-9]{8}_1062355673_merge_google_pbn\\.csv$
^[0-9]{8}_8026062435_merge_google_pbn\\.csv$
^[0-9]{8}_1062355673_store_visits_report\\.csv$
max@host 10:14:19: ~$ 

次のオプションがありますmy.cnf

[client] 
host = db-master 
user = user 
password = pass 
default-character-set=utf8

結果をパイピングすると、tail出力/文字列が変わるのはなぜですか? (二重参照\)。

答え1

いいえtail、パイプラインです。

mysql標準出力が端末装置の場合、ユーザーが使用可能になると、ASCIIボックス型出力形式の表が使用され、次に戻ります。スクリプトパイプや通常のファイルなど、そうでない場合はフォーマットします。

あなたも同じことを見るでしょう。その他次のようにフォーマットされています

mysql... | cat

または

mysql > file; cat file

-r出力形式に影響を与える/ --raw-s/ --silent-B/ --batch-N// --skip-column-names--column-names=0/ -H--html/ -t...も参照してください。--table

出力が端末装置に送信されない場合でも、表形式の出力を取得するには、次の-tオプションを追加します。

mysql -t ... | tail -n +2

ただし、ヘッダー行を削除するには、-N有無にかかわらずを使用してください-t

可能な限りヘッダーなしでデータベースから値を生の状態にするには、次のようにします。

mysql --defaults-extra-file=/some/protected/file/with/credentials \
      --batch --raw --skip-column-names -e 'select...' database

それは:

  • psファイルに資格情報(たとえば、あなたのもの)を渡して、出力my.cnfにパスワードを公開しないでください--defaults-extra-file
  • 使用一括表形式の出力を防止するモードです(そして実際にバッチ処理中なので他の効果がある可能性があることを認めます)。
  • --raw避けるために逃げる。この値には改行文字が含まれていないと仮定します。それ以外の場合、出力は安定して後処理できません。
  • --skip-column-namesヘッダー行を削除します。

関連情報