আমি কীভাবে একটি কলামে টাইমস্ট্যাম্পগুলিকে একটি তারিখে রূপান্তর করতে পারি?


15

আমার এতে একটি ফাইল রয়েছে:

1415602803,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
1415602807,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
1415602811,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
1415602815,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

আমি এই বিন্যাসে টাইমস্ট্যাম্পকে একটি তারিখে রূপান্তর করতে চাই:

2014-11-10 02:00:03,LOGIN SUCCESS,AUTH,user2,192.168.203.63,10.146.124.73,59996,22
2014-11-10 02:00:07,LOGIN SUCCESS,AUTH,user1,172.24.31.10,172.32.1.1,48191,22
2014-11-10 02:00:11,LOGIN FAILED,AUTH,root,172.24.166.153,10.146.124.73,52506,22
2014-11-10 02:00:15,LOGIN FAILED,AUTH,user3,192.168.123.55,10.146.32.99,55750,22

আমি এটা কিভাবে করবো?

আমি জানি এটি কাজ করে: perl -pe 's/(\d+)/localtime($1)/e'( এই প্রশ্ন থেকে ) তবে আউটপুট ফর্ম্যাটটি Mon Nov 10 02:00:03 2014

আমি জানি এই কমান্ডটি টাইমস্ট্যাম্পগুলিকে আমার পছন্দসই আউটপুটে রূপান্তর করতে date -d@1415602803 +"%F %H:%M:%S"পারে : তবে আমি সমস্ত উদ্ধৃতি এবং হোয়াট নোটের কারণে এটি awkব্যবহার করে কাজ করতে পারি না system("cmd")

উত্তর:


6

এটি সম্ভবত পছন্দ করুন

perl -pe 'use POSIX qw(strftime); s/^(\d+)/strftime "%F %H:%M:%S", localtime($1)/e' 

17

এখানে কিছু পাওয়া গেছে: স্ট্যাকওভারফ্লো - কমান্ড লাইনে ইউনিক্সটাইম থেকে রূপান্তর করুন

এটি নিয়ে এসেছেন:

awk -F"," '{OFS=","; $1=strftime("%Y-%m-%d %H:%M:%S", $1); print $0}' file
  • -F","এর ক্ষেত্র বিভাজক ব্যবহার করতে ,,
  • OFS=",";যাতে আউটপুট ক্ষেত্রগুলিও একটি দ্বারা পৃথক করা হয় ,,
  • $1=strftime("%Y-%m-%d %H:%M:%S", $1);প্রথম ক্ষেত্রের মানকে $1নির্দিষ্ট বিন্যাসে পরিবর্তন করতে এবং
  • print $0; পুরো লাইন মুদ্রণ করতে।

2
awk 'BEGIN{ print strftime("%Y-%m-%d %H:%M:%S", 0) }'awk: line 2: function strftime never definedএখানে দেয় । দয়া করে স্পষ্ট করে দিন যে প্রত্যেকটা AWK নেই strftime()! বেশিরভাগ (সমস্ত?) এডাব্লুকে-তে চলছে এমন একটি সমাধানের জন্য, দয়া করে dateপোর্টেবল থাকার জন্য বাহ্যিক কমান্ডটি ব্যবহার করুন ।

2
@ ইয়েতি, কয়েকটি dateবাস্তবায়ন রয়েছে যেগুলি তারিখগুলিকে ফর্ম্যাটগুলির মধ্যে একটি এক্সটেনশন হিসাবে রূপান্তর করতে পারে তবে কীভাবে এটি সম্পন্ন হয় তা বাস্তবায়নের মধ্যে সম্পূর্ণ আলাদা হয়। উদাহরণস্বরূপ, কস্টাস প্রদত্ত সমাধানটি জিএনইউ-র নির্দিষ্ট একটি বাক্য গঠন ব্যবহার করে date। আপনি যদি বহনযোগ্যতা চান, ব্যবহার করুন perl
স্টাফেন চেজেলাস

4

আপনি যদি পছন্দ করেন তবে যে কোনও তারিখের ফর্ম্যাট সহ awkবাহ্যিক কমান্ড ব্যবহার করতে পারেনdate

awk -F, -v OFS="," '{("date +%F\ %T -d @"$1)|getline $1}1'

ব্যবহার না করার জন্য +1 strftime()!

4
নোট করুন যে একটি বাহ্যিক কমান্ড ব্যবহার করা একটি তীব্র পারফরম্যান্স হিট করবে, বিশেষত লক্ষণীয় যে যদি কয়েক হাজার সারি প্রক্রিয়াজাত করা হয়
জোসে গমেজ

2

আপনিও চেষ্টা করতে পারেন:

cat test.txt | sed 's/^/echo "/; s/\([0-9]\{10\}\)/`date -d @\1`/; s/$/"/' | bash

2

আমি 9 মাস আগে একটি প্রশ্ন জিজ্ঞাসা করেছি যা এটির একটি সদৃশ চিহ্নিত হয়েছিল। আমি এই মুহূর্তে আমার জন্য কাজ করা উত্তরটি পোস্ট করার জন্য কেবল একটি অনুরোধ দেখেছি। এখানে সেই প্রশ্ন ও উত্তরের একটি লিঙ্ক দেওয়া আছে।

/unix//a/304009/172916

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