উপায়টি bash
ভাল তবে আপনি যদি এমন শেল নিয়ে কাজ করছেন যা কোঁকড়া ধনুর্বন্ধনী প্রসারণ সমর্থন করে না? উদাহরণস্বরূপ touch file{1..10}
আমার জন্য কাজ করে না mksh
। শেল নির্বিশেষে তিনটি বিকল্প উপায় এখানে কাজ করে's
SeQ
আরও শেল-নিরপেক্ষ পন্থা seq
হ'ল printf
বিকল্পগুলির সাথে ফর্ম্যাট করা সংখ্যার ক্রম উত্পন্ন করতে কমান্ড একত্রিত করা এবং xargs
কমান্ডে এটি পাস করা । উদাহরণ স্বরূপ,
$ ls -l
total 0
$ seq -f "%04.0f" 10 | xargs -I "{}" touch bspl"{}".c
$ ls
bspl0002.c bspl0004.c bspl0006.c bspl0008.c bspl0010.c
bspl0001.c bspl0003.c bspl0005.c bspl0007.c bspl0009.c
পার্ল
অবশ্যই, পার্ল, বেশ ওয়াইডস্প্রেড * নিক্স সরঞ্জাম হয়েও এটি করতে পারে। আমাদের এখানে নির্দিষ্ট ওয়ান-লাইনার কমান্ডটি নিম্নরূপ:
perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5
কার্যকরভাবে এখানে যা ঘটে তা হ'ল আমরা 3 টি কমান্ড-লাইন আর্গুমেন্ট নির্দিষ্ট করি: ফাইলের নাম উপসর্গ, সূচনা সূচনা এবং সমাপ্ত সূচক। তারপরে আমরা do { } for $ARGV[1] .. $ARGV[2]
সংখ্যার নির্দিষ্ট পরিসরের জন্য পুনরাবৃত্তি করতে ব্যবহার করি । বলুন, $ARGV[1]
5 ছিল এবং $ARGV[2]
9 ছিল, আমরা 5,6,7,8 এবং 9 এর উপরে পুনরাবৃত্তি করব।
কোঁকড়া ধনুর্বন্ধনী মধ্যে প্রতিটি পুনরাবৃত্তির উপর কি ঘটে? আমরা প্রতিটি সংখ্যার সাথে নির্দিষ্ট করে নিই $_
এবং sprintf()
ফাংশন ব্যবহার করে একটি স্ট্রিং এম তৈরি করি যা উপসর্গ (প্রথম কমান্ড-লাইন আর্গুমেন্ট, $ARGV[0]
) এবং প্রদত্ত সংখ্যাটি printf
বিভক্ত করে তোলে তবে 4 টি জিরো (যা বিন্যাসের স্টাইল দ্বারা সম্পন্ন হয়) দিয়ে নম্বরটি পূরণ করে , %04d
অংশ) এবং .c
প্রত্যয়টি সংযুক্ত করুন। প্রতিটি পুনরাবৃত্তির ফলাফল হিসাবে আমরা একটি নাম তৈরি করি bspl0001.c
।
open(my $fh, ">", $var);close($fh)
কার্যকরভাবে হিসাবে কাজ করে touch
, কমান্ড নিদিষ্ট নামের একটি ফাইল তৈরি করা।
কিছুটা লম্বা হওয়ার সময় এটি জ্যাকব ভ্লিজমের পাইথন স্ক্রিপ্টের মতো ফ্যাশনে বেশ ভাল অভিনয় করে। এটি চাইলে পাঠযোগ্যতার জন্য কোনও স্ক্রিপ্টে রূপান্তর করা যেতে পারে, যেমন:
#!/usr/bin/env perl
use strict;
use warnings;
for my $i ( $ARGV[1] .. $ARGV[2] ) {
my $var=sprintf("%s%04d.c",$ARGV[0],$i );
open(my $fh, ">", $var) or die "Couldn't open " . $var ;
close($fh) or die "Couldn't close " . $var ;
}
এটি পরীক্ষা করতে দেয়। প্রথমে ওয়ান-লাইনার:
$ ls -l
total 0
$ perl -le 'do { $var=sprintf("%s%04d.c",$ARGV[0],$_ ); open(my $fh, ">", $var);close($fh) } for $ARGV[1] .. $ARGV[2]' bslp 1 5
$ ls -l
total 0
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0001.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0002.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0003.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0004.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:36 bslp0005.c
এবং এখন স্ক্রিপ্ট:
$ ls -l
total 4
-rwxrwxr-x 1 xieerqi xieerqi 244 2月 5 23:57 touch_range.pl*
$ ./touch_range.pl bspl 1 5
$ ls -l
total 4
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0001.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0002.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0003.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0004.c
-rw-rw-r-- 1 xieerqi xieerqi 0 2月 5 23:58 bspl0005.c
-rwxrwxr-x 1 xieerqi xieerqi 244 2月 5 23:57 touch_range.pl*
awk
আরেকটি পদ্ধতির সাথে থাকবে awk
, একটি লুপের জন্য একটি চলমান, একটি নির্দিষ্ট ফাইলে পুনর্নির্দেশ করা। পদ্ধতিটি কমান্ড-লাইন আর্গুমেন্টগুলির সাথে পার্ল ওয়ান-লাইনারের সমান। যদিও awk
প্রাথমিকভাবে একটি পাঠ্য প্রক্রিয়াজাতকরণ ইউটিলিটি, এটি এখনও কিছু শীতল সিস্টেম প্রোগ্রামিং করতে পারে।
$ awk 'BEGIN{for(i=ARGV[2];i<=ARGV[3];i++){fd=sprintf("%s%04d.c",ARGV[1],i); printf "" > fd;close(fd)}}' bslp 1 5