忍者ブログ
ブログ内検索
フリーエリア
カレンダー
07 2025/08 09
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
最新TB
カウンター
プロフィール
HN:
Tassie
年齢:
44
性別:
男性
誕生日:
1980/09/19
趣味:
音楽・映画・スポーツ
バーコード
アクセス解析
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

用途:
文字列検索処理のテスト用
圧縮の効きにくいファイルが必要な時

あまり凝らずに、簡単な方法でランダムな中身のファイルを作ってみます。

strfryを使って、ランダムな文字列を作ります。
下記の例だと、8000ループで、512KBのファイルが出来ます。
1ファイル作成するのに、0.1秒も掛かりません。環境にもよりますが。。
 
------------------------------------------------------------
#define _GNU_SOURCE
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
        char str[256] = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        FILE *fp;
        int i;
        char filename[256];
        strcpy(filename,argv[1]);
        fp = fopen(filename, "w");
        for(i=0;i<8000;i++){
                strfry(str);
                fprintf(fp, "%s\r\n", str);
        }
        fclose(fp);
}
------------------------------------------------------------

strfryのマニュアルページ
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strfry.3.html

strfry - 文字列をランダムに並べ変える

strfry() 関数は、文字列 string の内容をランダムに並び換える。並び換えは、
rand(3) 関数を用いて、文字列中の各文字を無作為に交換することで実現される。結果は、文字列 string のアナグラムである。
PR
仕事柄、メールサーバの性能評価などで、メールを大量に送ることがあります。
そんな時に使うのが下記のようなスクリプト。
seqコマンドで指定した数だけメール送信することが可能です。
また、本文の内容をランダムにするために、/dev/urandomから
headコマンドで指定したサイズのデータを取得しています。
下記の例だと、毎秒、100KB程度のメール100通まで、hoge@hoge.dom.jp宛てに送信します。
(注:絶対に悪用しないように!)

-------------------------------------------------------------
#!/bin/bash

for x in `seq 1 100`
do
    date >> /tmp/mailsend_seq.log
    echo $x >> /tmp/mailsend_seq.log
    head -c 100k /dev/urandom > /tmp/test.txt
    mail -s testmail$x hoge
@hoge.dom.jp < /tmp/test.txt
    sleep 1
done
exit

-------------------------------------------------------------
例えば、古いLinux環境のように、EUCが標準の時代に作成した
ファイルを、UTF-8のシステムに持っていって使う場合、日本語が
入ったファイルだと文字コード変換が必要になる。

そんな時に便利なのが、nkfやiconvだ。
ここでは、通常のLinux環境なら標準で入っているであろうiconvを使う。

iconv -f euc-jp -t utf-8 filename -o outfile

このコマンドで"filename"というファイルを文字コード変換して、
"outfile"という名前のファイルに出力してくれる。

特定ディレクトリ内の*.txtファイルを一括で文字コード変換する場合は
下記のようにコマンドラインで実行する。

for x in *.txt ;do echo $x; /usr/bin/iconv -f euc-jp -t utf-8 $x -o
$x.new; mv -f $x.new $x; done
フォルダ内のファイルのバックアップを取る。

前回と同様、for文を使う。
同じフォルダ内に、.bakと拡張子をつけてコピーする。

for x in ./*; do cp -f $x $x.bak;done

for文をうまく使いこなすことが、シェル使いの第一歩かな。

ちなみに環境はCentOS4.2。
複数のファイルのとある文字列xxxを、yyyに一度に置き換えられたら
楽なのになー、と思うことがあります。
対象のファイル数が多いと、1ファイルずつエディタで書き直していたのでは
相当時間が掛かってしまいます。

コマンドライン上で一発でやる方法をご紹介します。

例:
カレントディレクトリ以下のファイル内の"charset=euc-jp"を
"charset=utf-8"に変換。

for x in `fgrep -l 'charset=euc-jp' */*`; do sed
s/'charset=euc-jp'/'charset=utf-8'/g $x > $x.new && mv -f $x.new $x; done

grepのオプションなどは、適宜変更して下さい。

☆おまけのTips☆
fgrepは正規表現が使えませんが、単純比較ならgrepより高速です。
sedで"/"を対象文字に入れる場合は@などで区切ります。
忍者ブログ [PR]