আমি দেখতে অদ্ভুত ছিল কিভাবে এর মধ্যে কিছু (কিছু বিকল্প + +) একটি বরং বড় ফাইলের সাথে গতি-অনুযায়ী ( 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
মাইকজার্ভ :
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
। আশ্চর্যজনকভাবে, এটি মাইক্রজার্ভের সমাধানের চেয়ে 200 গুণ ধীর ।
অ্যাজকের সাথে এখানে আরও কয়েকটি উপায় রয়েছে :
awk '$1=$1' RS= OFS=' | ' iplist
real 0m4.543s
awk '{printf "%s%s",sep,$0,sep=" | "} END {print ""}' iplist
real 0m5.511s
Perl:
perl -ple '$\=eof()?"\n":" | "' iplist
real 0m9.646s
xargs:
xargs <iplist printf ' | %s' | cut -c4-
real 0m6.326s
মাথা + পেস্ট + টিআর + বিড়ালের সংমিশ্রণ:
{ head -n -1 | paste -d' |' - /dev/null /dev/null | tr \\n \ ; cat ; } <iplist
real 0m0.991s
আপনার যদি থাকে GNU coreutils
এবং আপনার আইপিগুলির তালিকাটি যদি সত্যিই বিশাল না হয় (আসুন 50000 আইপি পর্যন্ত বলা যাক) আপনি এটি দিয়েও করতে পারেন 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
পাইপগুলিতে নতুন লাইনের উত্তর দিতে চান|
? পছন্দ<ipfile tr \\n \| >outfile
?