電子書籍の厳選無料作品が豊富!

単純な文字列を多く作ろうと思ったのですが、その為のコマンドがわかりません。

たとえば、vi-エディタでファイル内に1~10000の数を縦に並べてみようかと思ったのですが、これはひたすらENTERを押して行番号をつけるコマンドを入れるしかないのでしょうか?そもそも第一に、行番号をつけるコマンドで出来た数字はデータとして残るのでしょうか?

また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか?

また、上記の様な事をさせるときにはviを使う以外に何か方法はあるのでしょうか?e-macsを使ってC言語?でシェルスプリクト??を上手く使えばできる、と言われたのですが、それをするとひたすら1~10000個のファイルがカレントディレクトリに生成されてしまいました。

Linux、始めたばかりでよくわからないのですが(一応基本コマンド程度はマスターしましたが)よろしくお願いします。

A 回答 (4件)

> 1~10000の数を縦に並べてみようかと思ったのですが



考え方は人それぞれでいろいろなやり方があると思いますが、
思いついたものを書いておきます。

・vi
空行を作成し、その行をddで削除した後、
10000p (数字分貼り付けを繰り返す)コマンドを実行すると、
10000行分の空行が出来ます。
それを例えば、test.txtという名前で保存した後に
コマンドで、cat -n test.txt > test2.txt
とすると、1~10000までの番号がついたファイルがtest2.txtとして出来ます。

・emacs
Esc 10000 Enter
とバッファ上で入力した後に、保存すると10000行の空行ができるので、
保存してviの時と同じようにcat -nコマンドを実行する。

・シェルスクリプト
==== test.sh ===============
#!/bin/sh
cnt=0
while [ $cnt -ne 10000 ]; do
echo $cnt
cnt=`expr $cnt + 1`
done > test.txt
============================
を実行すると、test.txtというファイルが出来ます。

> また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか?

一つ一つのコマンドの動作は簡単なものですが、
組み合わせることでいろいろなことができるようになります。
発想次第ですね。
単純にスクリプトを書くと、
===== test2.sh =================
#!/bin/sh

WORD="a b c d e"

echo $WORD
cnt=1
cnt2=0
while [ $cnt -lt 10 ]
do
for f in $WORD
do
while [ $cnt2 -lt $cnt ]
do
echo -n $f
cnt2=`expr $cnt2 + 1`
done
cnt2=0
echo -n " "
done
cnt=`expr $cnt + 1`
echo
done
===================================================
sedやawkを使う人も多いでしょうし、perlなんかでも簡単にできそうです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
無事にファイルが作成できました。

詳しい説明、わかり易い解説をありがとうございました。

また何かあったときには、是非よろしくお願いします。

お礼日時:2008/05/27 11:46

> また、数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか?



コマンドラインから
 perl -le "$i=q(a); print $i++ until $i gt q(zz)"
でその間の文字列を生成できます。
aとzzを変えて使ってください。
    • good
    • 0
この回答へのお礼

"このバージョンではできません、ごめんなさい"と出力されました...
なんだったのでしょうか...???

お礼日時:2008/05/27 11:45

・set nu で付けた行番号は表示だけで、ファイル自体には付加されません。



・1~10000 だとseqコマンドと組み合わせて、
:r !seq 10000
(seq コマンドの応用としては、seq 101 200 とか seq 0 2 10 とか)

・a b ・・・ aa ab ・・・ aaa aab
直接にこういうシーケンスを出力するコマンドはないので、何らかのプログラム、スクリプトを書くしかないですね。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
参考になりました。

お礼日時:2008/05/27 11:48

即興で作ってみました。


以下のスクリプトを test.pl として保存し、
perl test.pl 保存先ファイル名
で実行してみてください。
perl はたいていの環境で動作するはずです。

---
use strict;
my ($ct);
if( @ARGV < 1 ){
print "ファイル名を指定してください。\n";
exit;
}
print "savefile = " . $ARGV[0] . "\n";
open(FILE, ">" . $ARGV[0]) or die "Can't Save";
for( $ct=1; $ct<=10000; $ct++){
print FILE $ct . "\n";
}
close(FILE);
---

>数字以外でも、縦に a b c d e f ・・・ z aa bb cc dd ・・・ zz aaa bbb ccc ・・・といった一定の規則で並ぶ文字列を一挙に作成できるコマンド等はあるのでしょうか?

聞いたことが無いです。
ただ、このような命題は、どんなプログラムの本でも最初のほうに出てくるのでは?
    • good
    • 0
この回答へのお礼

早速の解答、ありがとうございました。参考になりました。

お礼日時:2008/05/27 11:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!