পাঠ্য ফাইল থেকে কলাম 2 কাটা


15

আমার টেক্সট ফাইলটির পৃথককারী কেবল ফাঁকা স্থান নির্দিষ্ট করার জন্য কোনও ডিলিমিটার নেই, আমি কীভাবে কলাম 2 আউটপুট ফাইলে কাটব,

39    207  City and County of San Francisc   REJECTED          MAT = 0
78    412  Cases and materials on corporat   REJECTED          MAT = 0
82    431  The preparation of contracts an   REJECTED          MAT = 0

সুতরাং আউটপুট আমার প্রয়োজন

207
412
432

উত্তর:


13

এটি সবচেয়ে সহজ awkযার সাহায্যে একাধিক পরপর স্পেসগুলি একক হিসাবে বিবেচনা করে, তাই

awk '{print $2}' file

কপি করে প্রিন্ট

207
412
431

তবে স্পষ্টতই অনেকগুলি, আরও অনেক সরঞ্জাম রয়েছে যা কাজটি করবে, এমনকি এমন কাজের জন্য নকশাকৃত নয় grep:

grep -Po '^[^ ]+[ ]+\K[^ ]+' file

6

আপনার ডেটা (উদাহরণস্বরূপ, বিড়াল কলাম / টেক্সট) কেটে পাঠাতে পাইপগুলি ব্যবহার করুন।

cat columns.txt | cut -d" " -f5

উদাহরণস্বরূপ আপনি যে ডেটা সরবরাহ করেছেন তাতে কোনও একক স্পেস ডিলিমিটার আপনার ক্ষেত্রের 5 টি তথ্য রাখে that আউটপুটটিকে অন্য কোনও ফাইলে পাঠাতে পুনঃনির্দেশ ব্যবহার করুন।

cat collumns.txt | cut -d" " -f5 > field2.txt

Awk কমান্ডটি ব্যবহার করে আপনি নীচের মতো কিছু করতে পারেন যা আপনার পরে থাকা ক্ষেত্রটি স্বয়ংক্রিয়ভাবে স্বীকৃতি দেয় কারণ সেখানে ডেটা রয়েছে (?) আমাকে অ্যাডাব্লিক সম্পর্কে আরও শিখতে হবে।

awk -F' ' '{print $2}' columns.txt

3
উত্সাহ cat ... |খুব কমই প্রয়োজন হয়। বেশিরভাগ ইউনিক্স আদেশ যেমন cutএক বা একাধিক ইনপুট ফাইলকে আর্গুমেন্ট হিসাবে গ্রহণ করে cut -d" " -f5 columns.txt
ডেনিস হাও

1

যেমন @ জিম্মিজ বলেছেন, awk '{print $2}' fileসহজ উত্তর।

যদি কোনও কারণে আপনি ব্যবহার করতে awkএবং জেদ করতে চান না cut, আপনি কাটাতে পাইপ দেওয়ার আগে sedদুটি বা ততোধিক স্পেসের প্রতিটি উদাহরণকে একটি ট্যাব ( cutডিফল্ট ডিলিমিটার) এ রূপান্তর করতে পারেন :

$ sed -e 's/  \+/\t/g' riley.txt | cut -f2 
207
412
431

0

আপনি এখনও আপনার ডিলিমিটার হিসাবে একক স্পেস ব্যবহার করতে পারেন, আপনার আরও কলাম থাকবে। আপনার দেওয়া মান cut -d' ' -f2 থেকে 5 বা সম্ভবত 6 থেকে বাড়িয়ে নিন you আপনার পছন্দসই ফলাফল না পাওয়া পর্যন্ত সংখ্যা বৃদ্ধি করুন the


0
grep -Po '^[^ ]+[ ]+\K[^ ]+' file

উপরের একটি খুব দরকারী যখন ডেটা এক্সট্রাকশনের জন্য awk এর মতো লিনাক্স ইউটিলিটিগুলি কাজ করে না যদি আপনি শেল স্ক্রিপ্টের মধ্যে "রুট" ব্যবহারকারীর পরিবর্তিত হন তবে নীচের মতো:

sudo -i <<EOF
ps aux | grep -E -i "[l]js"  |grep -v "javaagent" | awk '{print $2}' # So awk won't work here
ps aux | grep -E -i "[l]js"  | grep -v "javaagent" | grep -Po '^[^ ]+[ ]+\K[^ ]+'
EOF

1
awkআপনার উদাহরণে "কাজ করবে না " এর একমাত্র কারণ হ'ল এখানে-নথিটি উদ্ধৃত নয়, যার অর্থ $2শেল দ্বারা দ্বিতীয় অবস্থানগত প্যারামিটারে প্রসারিত হবে। সমাধান সম্ভবত সুইচ করার জন্য একটি নয় grepকমান্ড কিন্তু হয় পালিয়ে $মধ্যে $2যেমন \$2বা শুধু ব্যবহার করে পুরো ডকুমেন্ট উদ্ধৃত করা <<'EOF'স্থানে <<EOF। এছাড়াও মনে রাখবেন যে আপনার উদাহরণের কাজটি আরও সহজভাবে সম্পাদিত হয়েছে pgrep
কুসালানন্দ

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