इस प्रश्न से यूनिक्स का उपयोग करके कॉलम को कॉपी और बदलें
मैंने एक समाधान बनाने की कोशिश की है जो केवल इस फ़ाइल से काम करता है:
20070101 10.2317 79.1638 6.0 26.7 20.9 0.8 14.0 98.6
20070102 10.2317 79.1638 5.6 26.5 20.8 1.9 13.6 98.0
20070103 10.2317 79.1638 7.5 27.7 20.8 0.1 15.8 96.4
20070104 10.2317 79.1638 8.1 26.0 19.6 0.0 15.5 94.1
और उत्पादन प्राप्त करें:
01/01/2007 10.2317 79.1638 6.0 26.7 20.9 0.8 14.0 98.6
02/01/2007 10.2317 79.1638 5.6 26.5 20.8 1.9 13.6 98.0
03/01/2007 10.2317 79.1638 7.5 27.7 20.8 0.1 15.8 96.4
04/01/2007 10.2317 79.1638 8.1 26.0 19.6 0.0 15.5 94.1
अन्य फ़ाइलों को शामिल किए बिना।
इसलिए मैं पहले कॉलम को परिवर्तित तिथि तक स्थानापन्न करना चाहता हूं।
मुझे मूल फ़ाइल से दिनांक मिली:
$ awk '{print $1}' filedate.txt
20070101
20070102
20070103
20070104
फिर मैंने तारीख रूपांतरण के साथ किया:
for i in $(awk '{print $1}' filedate.txt); do date -d "$i" +%d/%m/%Y; done
01/01/2007
02/01/2007
03/01/2007
04/01/2007
लेकिन मैं पहले से परिवर्तित दिनांक मानों द्वारा फ़ाइल के पहले कॉलम को संशोधित करने में सक्षम नहीं हूं। मैंने awk प्रतिस्थापन के साथ प्रयास किया ( awk '{$1=$dt}1'
):
for i in $(awk '{print $1}' filedate.txt); do dt=$(date -d "$i" +%d/%m/%Y) && awk '{$1=$dt}1' filedate.txt; done
लेकिन जैसा कि एक लूप शामिल है, आउटपुट वांछित नहीं है।
मैं इसे कैसे प्राप्त कर सकता हूं awk
? क्या ऐसा करना संभव है sed
?
संपादित करें
अन्य प्रश्न की टिप्पणियों में मैंने निम्नलिखित तरीके से देखा sed
sed 's,^\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\),\3/\2/\1,'
लेकिन मैं अब उत्सुक हूँ कि इसे date
कमांड में कैसे शामिल किया जाए ।