/ / मैं यूनिक्स टाइम स्ट्रिंग्स से भरी फाइल को मानव पठनीय तारीखों में कैसे बदल सकता हूं? - पर्ल, बैश, यूनिक्स-टाइमस्टैम्प

मैं यूनिक्स टाइम स्ट्रिंग से भरा फ़ाइल को मानव पठनीय तिथियों में कैसे परिवर्तित कर सकता हूं? - पर्ल, बैश, यूनिक्स-टाइमस्टैम्प

मैं यूनिक्स टाइम स्ट्रिंग्स से भरी फाइल को प्रोसेस कर रहा हूं। मैं उन सभी को मानव पठनीय में बदलना चाहता हूं।

फ़ाइल इस तरह दिखती है:

1153335401
1153448586
1153476729
1153494310
1153603662
1153640211

यहां लिपि है:

#! /bin/bash
FILE="test.txt"
cat $FILE | while read line; do
perl -e "print scalar(gmtime($line)), "n""
done

ये काम नहीं कर रहा है। मुझे जो आउटपुट मिलता है थू जन 1 00:00:00 1970 हर लाइन के लिए। मुझे लगता है कि लाइन ब्रेक को उठाया जा रहा है और इसीलिए यह काम नहीं कर रहा है। कोई विचार? मैं मैक OSX का उपयोग कर रहा हूं, इससे कोई फर्क नहीं पड़ता।

उत्तर:

जवाब के लिए 9 № 1
$ perl -lne "प्रिंट स्केलर gmtime $ _" test.txt बुध जुलाई 19 18:56:41 2006 शुक्र जुलाई 21 02:23:06 2006 शुक्र जुलाई 21 10:12:09 2006 शुक्र जुलाई 21 15:05:10 2006 Sat Jul 22 21:27:42 2006 Sun Jul 23 07:36:51 2006

जवाब के लिए 3 № 2

इसलिये $line सिंगल कोट्स में, यह बैश द्वारा संसाधित नहीं किया जा रहा है, और इसलिए $line एक बैश वैरिएबल के बजाय एक (अपरिभाषित) पर्ल वैरिएबल के रूप में माना जाता है।

आपको एक की जरूरत नहीं है while read बैश लूप; पर्ल इसके इस्तेमाल से लूपिंग खुद कर सकता है -n विकल्प.

perl -nE "say scalar(gmtime($_))" test.txt

(का उपयोग -E सक्षम करने के लिए say, जो स्वचालित रूप से एक नई पंक्ति जोड़ता है)


उत्तर № 3 के लिए 1

उपयोग नहीं करते हैं cat.

#! /bin/bash
file="test.txt"
while read line
do
date -d @$line
done < "$file"

उत्तर के लिए 1 № 4

यह लाइन नहीं टूटती है, यह है कि $line पर्ल स्क्रिप्ट के अंदर की तुलना में एक अलग चर है $line बैश स्क्रिप्ट में। तुम कोशिश कर सकते हो:

perl -e "print scalar(gmtime($line)),qq/\n/"

डबल-कोट्स पर ध्यान दें, जो बैश को वैरिएबल इंटरपोल करने की अनुमति देते हैं।


जवाब के लिए 0 № 5

पर्ल की कोई आवश्यकता नहीं:

awk "{ print strftime("%c", $0) }" somefile.txt

जवाब के लिए 0 № 6

मुद्दा यह है कि आपने "कुछ भी" नहीं दिया है $line वैरिएबल, इसलिए यह एक शून्य-मूल्य के लिए चूक करता है, यही वजह है कि आप हमेशा प्राप्त करते हैं थू जन 1 00:00:00 1970 एक आउटपुट के रूप में।

gbacon का उत्तर पर्ल के रूप में के रूप में चालाक के बारे में है।


उत्तर के लिए 0 № 7

GNU दिनांक / xargs समाधान:

  xargs -i  date -d "1970-01-01 00:00:00 {} seconds"  </tmp/timestamps

जवाब के लिए 0 № 8

यह साधारण कमांड करेगा

 cat time.txt | while read line; do date -ud @$line; done > string.txt

जवाब के लिए 0 № 9

यह नहीं भूलना चाहिए कि पर्ल में gmtime () के बजाय स्थानीय समय () का उपयोग किया जा सकता है

इसलिए, यदि आप सर्दियों में ग्रीनविच में नहीं हैं, तो आप स्थानीय समय () का उपयोग कर सकते हैं, उदा।

पर्ल कोड:

    my $unixtime = 1417014507;
my $humantime = localtime($unixtime);
print "$humantime = $humantime n";

उत्पादन:

    $humantime = Wed Nov 26 15:08:27 2014