AWK या sed का उपयोग करके मैं किसी भी लाइन को कैसे हटा सकता हूं जहां टाइमस्टैम्प (पहला कॉलम) पहली पंक्ति की अनदेखी करते हुए 13 संख्यात्मक वर्णों के बराबर नहीं है।
पहले:
timestamp,pageNo,description
1451317591621,01,Home Page Request
14513,Home Page Request
1451317591623,03,Home Page Request
1451317,04,Home Page Request
1451317591625,05,Home Page Request
बाद:
timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request
उत्तर:
उत्तर № 1 के लिए 1का उपयोग करते हुए awk
(gawk 4+ या 3+ के साथ --re-interval विकल्प की आवश्यकता है)
awk -F, "$1~/^[0-9]{13}$/||NR==1" file
का उपयोग करते हुए sed
sed "/^[0-9]{13},/p;1p;d" file
जवाब के लिए 2 № 2
का उपयोग करते हुए sed
, पास करें यदि लाइन नंबर एक है या पहले क्षेत्र में तेरह अंक हैं; और, हटाएं।
sed -r -e "1b" -e "/^[0-9]{13},/b" -e d file
Awk का उपयोग करना, इसी तरह, प्रिंट करें कि क्या लाइन नंबर एक है या पहला फ़ील्ड तेरह अक्षर और सभी संख्याएँ हैं।
awk -F , "NR == 1 || (len($1) == 13 && $1 ~ /^[0-9]*$/)" file
जवाब के लिए 0 № 3
awk -F, "NR==1 || (length($1) == 13 && $1+0 == $1)" file
जवाब के लिए 0 № 4
यदि पर्ल एक विकल्प है:
perl -F, -ane "print if $F[0] =~ /^[0-9]{13}$/ or $. == 1" file
इन कमांड-लाइन विकल्पों का उपयोग किया जाता है:
-n
इनपुट फ़ाइल की प्रत्येक पंक्ति के चारों ओर लूप-a
ऑटोसप्लिट मोड - विभाजन इनपुट लाइनों में@F
सरणी। व्हाट्सएप पर विभाजन के लिए चूक।-e
पर्ल कोड निष्पादित करें-F
ऑटोसप्लिट संशोधक, इस मामले में विभाजित है,
$.
लाइन नंबर है
@F
प्रत्येक पंक्ति में शब्दों की सरणी, के साथ शुरू अनुक्रमित है $F[0]
उत्पादन:
timestamp,pageNo,description
1451317591621,01,Home Page Request
1451317591623,03,Home Page Request
1451317591625,05,Home Page Request