'লেজ' এ পাইপিং কেন একটি লাইনের বিষয়বস্তু পরিবর্তন করে?


14

আমি যখন SELECTমাইএসকিউএল ওয়ার্কবেঞ্চের সাথে কোনওটির ফলাফলটি দেখি , তখন এটি একটি একক দিয়ে সঠিক \

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আউটপুট / স্ট্রিং পরিবর্তনের মাধ্যমে পাইপিং কেন হয় ? (ডাবল নোট করুন \)


আপনি যদি অন্য কমান্ডের মাধ্যমে পাইপ করেন তবে ঠিক একই আউটপুট পাবেন? উদাহরণস্বরূপ mysql ... | headবা mysql ... | grep 8?
টেরডন

আমার ইংরেজি উন্নতির জন্য ধন্যবাদ। headএবং grep 802এছাড়াও দ্বিগুণ না * \ * max@host 10:50:48: ~$ mysql -V mysql Ver 14.14 Distrib 5.5.55, for debian-linux-gnu (x86_64) using readline 6.3
FaxMax

আপনি কোন লেজ ব্যবহার করছেন? আপনি কি tail --version
am17

@ ম্যামস্যাক্স আমার লেজটি tail (GNU coreutils) 8.23তবে গ্রিপ বা মাথা নিয়ে আমার একই সমস্যা রয়েছে
ফ্যাক্সম্যাক্স

আমার ব্যাশ হয় GNU bash, version 4.3.30(1)-release (x86_64-pc-linux-gnu)এবং uname -aফলাফল:Linux host 3.16.0-4-amd64 #1 SMP Debian 3.16.43-2+deb8u2 (2017-06-26) x86_64 GNU/Linux
FaxMax

উত্তর:


32

এটি নয় tail, পাইপিং হচ্ছে।

mysqlASCII বক্সিং আউটপুট ফর্ম্যাট সহ একটি সারণী ব্যবহার করে যখন এর স্টাডাউটটি কোনও টার্মিনাল ডিভাইস হয় যখন এটি কোনও ব্যবহারকারীর উদ্দেশ্যে থাকে এবং যখন এটি পাইপ বা নিয়মিত ফাইলের মতো হয় না তখন স্ক্রিপ্টিং ফর্ম্যাটে ফিরে আসে ।

আপনি একই ভিন্ন ফর্ম্যাটটি দেখতে পাবেন

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 শিরোনাম লাইন অপসারণ করতে।

1
বিকল্পগুলি -r --column-names=0আমার সমস্যার সমাধান করেছে, ট্যাঙ্কগুলি
ফ্যাক্সম্যাক্স

3
lsআউটপুট কোনও টার্মিনালে গেলে আউটপুটটি কলামগুলিতে রাখা হয় একই কারণ , তবে পাইপ বা ফাইলে লেখার সময় একক কলাম হয়।
বার্মার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.