/ / AWK या SED का उपयोग करके मैं किसी भी लाइन को कैसे हटा सकता हूं जहां पहले कॉलम का कैरेक्टर काउंट 13 बराबर नहीं है - bash, awk, sed

AWK या SED का उपयोग करके मैं किसी भी लाइन को कैसे हटा सकता हूं जहां पहले कॉलम का कैरेक्टर काउंट 13 बराबर नहीं है - बैश, ऑक, सीड

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