मैं awk के साथ वास्तव में अच्छा नहीं हूं, इसलिए यहां मैंने एक पंक्ति में संख्या की घटनाओं को गिनने के लिए क्या किया:

Input.txt में यह है:

18 18 21 21 21 21 18 21

मैं सिर्फ ऊपर होने वाली अनूठी संख्या प्रदर्शित करना चाहता हूं। तो, यहाँ मेरा कोड है:

input="input.txt"

output=$(fmt -1 "$input" | sort | uniq | awk '{printf $1","}')

echo "$output"

उत्पादन:

18,21,

मुझे परिणाम सही मिला लेकिन अंत में वह अल्पविराम ,, मैं उस अल्पविराम को कैसे हटाऊं? साथ ही, क्या fmt का उपयोग किए बिना कोई सरल या साफ तरीका है?

अपेक्षित आउटपुट:

18,21

अल्पविराम को हटाने के लिए संपादित करें, मैं इसका उपयोग करता हूं:

sed 's/,$//'

और यह काम कर रहा है, लेकिन क्या fmt का उपयोग किए बिना ऐसा करने का कोई आसान तरीका है?

awk
2
Azimah 5 नवम्बर 2020, 10:52

3 जवाब

सबसे बढ़िया उत्तर

क्या आप कृपया अनुसरण करने का प्रयास कर सकते हैं।

awk '
BEGIN{ OFS="," }
{
  for(i=1;i<=NF;i++){
    if(!arr[$i]++){
      val=(val?val OFS:"")$i
    }
  }
  print val
  val=""
}' Input_file

स्पष्टीकरण: ऊपर के लिए विस्तृत विवरण जोड़ना।

awk '                          ##Starting awk program from here.
BEGIN{ OFS="," }               ##Setting output field separator as comma here.
{
  for(i=1;i<=NF;i++){          ##Traversing through all fields of currnet line here.
    if(!arr[$i]++){            ##Checking condition if arr is NOT having current field present in it
      val=(val?val OFS:"")$i   ##Creating val and keep adding values to it, to print at last all values.
    }
  }
  print val                    ##printing val here.
  val=""                       ##Nullify val here.
}' Input_file                  ##mentioning Input_file name here.
3
RavinderSingh13 5 नवम्बर 2020, 11:02

यहाँ gnu awk में एक वैकल्पिक तरीका दिया गया है:

awk -v RS='[[:blank:]]+' '!seen[$1]++{s=s (s!=""?",":"") $1} END{print s}' file.txt
18,21
3
anubhava 5 नवम्बर 2020, 12:38

perl के नए संस्करणों में uniq मानक पुस्तकालय में हैं। अन्यथा, आपको तर्क को मैन्युअल रूप से लिखना होगा (कैसे करें मैं पर्ल सरणी में अद्वितीय तत्व प्रिंट करता हूं?) या https://metacpan.org/ का उपयोग करें pod/List::MoreUtils

perl -MList::Util=uniq -lane 'print join ",", uniq @F'

perl -lane 'print join ",", grep { !$seen{$_}++ } @F'

ruby के साथ

ruby -ane 'puts $F.uniq * ","'
2
Sundeep 5 नवम्बर 2020, 12:01