मैं यह देखने के लिए उत्सुक था कि इनमें से कुछ (+ कुछ विकल्प) एक बड़ी फ़ाइल के साथ गति-वार कैसे काम करते हैं ( 163MiB
, IP
प्रति पंक्ति, ~ 13 मिलियन लाइनें):
wc -l < iplist
13144256
परिणाम ( sync; echo 3 > /proc/sys/vm/drop_caches
प्रत्येक कमांड के बाद; मैंने परीक्षणों को दोहराया - रिवर्स ऑर्डर में - कुछ घंटों के बाद लेकिन मतभेद नगण्य थे; यह भी ध्यान दें कि मैं उपयोग कर रहा हूं gnu sed
):
स्टीलड्राइवर :
बहुत धीमी गति से। दो मिनट के इंतजार के बाद गर्भपात हो गया ... इसलिए इसका कोई नतीजा नहीं निकला।
क्यूंग्लम :
awk 'FNR!=1{print l}{l=$0};END{ORS="";print l}' ORS=' | ' iplist
real 0m3.672s
perl -pe 's/\n/ | / unless eof' iplist
real 0m12.444s
mikeserv :
paste -d\ /dev/null iplist /dev/null | paste -sd\| -
real 0m0.983s
जेथिल :
sed 'H;1h;$!d;x;s/\n/ | /g' iplist
real 0m4.903s
अविनाश राज :
time python2.7 -c'
import sys
with open(sys.argv[1]) as f:
print " | ".join(line.strip() for line in f)' iplist
real 0m3.434s
तथा
val0x00ff :
while read -r ip; do printf '%s | ' "$ip"; done < iplist
real 3m4.321s
जिसका मतलब है 184.321s
। अप्रत्याशित रूप से, यह mikeserv के समाधान की तुलना में 200 गुना धीमा है ।
यहाँ कुछ और तरीके हैं
:
awk '$1=$1' RS= OFS=' | ' iplist
real 0m4.543s
awk '{printf "%s%s",sep,$0,sep=" | "} END {print ""}' iplist
real 0m5.511s
पर्ल:
perl -ple '$\=eof()?"\n":" | "' iplist
real 0m9.646s
xargs:
xargs <iplist printf ' | %s' | cut -c4-
real 0m6.326s
सिर + पेस्ट + tr + बिल्ली का एक संयोजन:
{ head -n -1 | paste -d' |' - /dev/null /dev/null | tr \\n \ ; cat ; } <iplist
real 0m0.991s
यदि आपके पास GNU coreutils
और यदि आपकी IP की सूची वास्तव में बहुत बड़ी नहीं है (तो आइए 50000 IP तक कहते हैं) आप इसके साथ भी ऐसा कर सकते हैं pr
:
pr -$(wc -l infile) -tJS' | ' -W1000000 infile >outfile
कहाँ पे
-$(wc -l infile) # no. of columns (= with no. of lines in your file)
-t # omit page headers and trailers
-J # merge lines
-S' | ' # separate columns by STRING
-W1000000 # set page width
6-लाइनों वाली फ़ाइल के लिए उदाहरण:
134.28.128.0
111.245.28.0
109.245.24.0
128.27.88.0
122.245.48.0
103.44.204.0
आदेश:
pr -$(wc -l <infile) -tJS' | ' -W1000 infile
आउटपुट:
134.28.128.0 | 111.245.28.0 | 109.245.24.0 | 128.27.88.0 | 122.245.48.0 | 103.44.204.0
tr
में newlines anslate करना चाहते हैं|
? पसंद है<ipfile tr \\n \| >outfile
?