ファイルの中身をマージ

コメントをどうぞ


2つのファイルの内容をマージしたい、という要望がアリ、スクリプトを作成してみました。

行数が同じ2つのファイルがあり、それを1つにしたい。

ファイル1

AAA
BBB
CCC

ファイル2

XXX
YYY
ZZZ

これを以下のようにマージしたい。
マージファイル

AAAXXX
BBBYYY
CCCZZZ

で、作成したのが、以下のスクリプトです。

#!/bin/bash

# 
echo " file 01 name"
read file01
echo " file 02 name"
read file02
echo " Output file"
read filename

# line number
a=$( wc ${file01} | awk '{print $1 }' )
#echo ${a}
data01=$( head -n 1 ${file01} )
data02=$( head -n 1 ${file02} )
echo ${data01} ${data02} >> ${filename}

i=1
while [ ${i} -lt ${a} ] ;  do
   i=$(( ${i} + 1 ))
#   echo ${i}
   data01=$( head -n ${i} ${file01} | tail -n 1 )
   data02=$( head -n ${i} ${file02} | tail -n 1 )
   echo ${data01} ${data02} >> ${filename}
done

exit 0

非常に、単純なスクリプトです。
他にも何か作ったら、公開しようと思います。

シングルユーザーモード

コメントをどうぞ


職場にたくさんの CentOS をインストールしたマシンがたくさんあります。
先日其のウチの数台に 10Gイーサのカードを追加したSEがいました。
基幹はGbitなんですが、試験的に10Gのネットワークを作成して、どれだか速くなるのか、をテストする目的の様です。
まあ、それはいいんですけどね。

 

カードを追加後、システムを起動のスイッチを押してもいつまで待ってもシステムがOSがあがってきません。
彼はなんだかんだと言い訳をしていましたが、起動時のメッセージを見ていたら、起動しない理由が分かりました。

ネットワークカードを追加したことにより、eth0, eth1の番号がずれたんです。
そのSEは追加したカードが eth2 になることを期待したようですが、追加したカードが eth0 になり、今まで使用していたNIC が eth1, eth2 になってしまったのです。

 

そりゃ、ネットワークがつながらなくなるよね。当然ネットワークドライブなんて見えない。
起動しないわけです。

 

そこで、対象システムをシングルユーザーモードで立ち上げることにしました。
電源スイッチを長押しして再起動。
GRUB を使用しているので、画面をしっかり見るようにします。

チャンスは5秒位しかないんだよね。

GRUB の画面がでた瞬間スペースキーを押し、対象OSを選択、そして「E」キーを押す。
選択したOSの起動コマンドが表示されるので、2行目の 「kernel 」で始まる行を選択してもう一度「E」キーを押す。

コマンドの編集画面でコマンドの最後に「single」を追加して、リターン。
その後で、「b」キーを押してOSの起動。
これでシングルユーザーモードで起動します。

無事にシステムがシングルユーザーモードで起動したら、/etc/sysconfig/network-scripts の下にある以下のファイルを修正しました。

ifcfg-eth0
ifcfg-eth1
ifcfg-eth2

ファイルを修正後、システムを起動したら、今度は無事に起動しました。

現在の子供のデッキ

コメントをどうぞ


つい最近、Xレアパック【プレミアムエディッション】を買い込みました。
狙いは、「凶龍爆神ガンディノス」、これで子供のデッキを強化しました。
今のところ、ハジメデッキ->皇獣デッキになっています。
デッキの内容は、以下の通りです。

ワン・ケンゴー 3
ドス・モンキ 3
ヒノシシ 2
剣馬グラニム 3
タッチペッット・モンキ 3
カキューソ 3
皇牙獣キンタローグ・ベアー 3
獅龍皇子レオグルス 2
ゴルホーン・イーグル 3
凶龍爆神ガンディノス 3
刀の覇王ムサシード・アシュライガー 1
牙皇ケルベロード 1
砲竜バル・ガンナー 3
英雄皇の神剣 2
決戦の巌龍島 2
双光気騨 3
爆裂十紋刃 2
絶甲氷盾 3

ムサシード・アシュライガーが3枚欲しいところですが、なかなか出てこない。
あと、日曜に近くのショップバトルに子供だけが参戦したのですが、大きなお友達以外も、
バゼルとかセイリュービとか持っているので、びっくりしました。
みんな早いなぁ。

ディレクトリ内にあるファイルの合計

コメントをどうぞ


ディレクトリに複数のファイルがある時に、合計したらいくらなのか?
以下のようにコマンドを実行すれば、Byte単位で分かります。

% ls -l Work | awk '{ i += $5 } END{ print i}'

このコマンドでは、結果がByte 表示のため、サイズを調べるのが、面倒。と言う意見がありました。
まあ、たしかにそうですね、そこで、以下のようなスクリプトを作成しました。
スクリプトの後に K、M、Gで単位を指定できます。

#!/bin/bash
#   ファイルサイズ表示
#
# ファイルの単位
unit=$1
# 対象ディレクトリ
dire=$2

if [ $# -eq 0 ] ; then
    echo " Please set Size and directory. Usage : ./filesum.sh {K|M|G} {Directory}"
    exit 1
fi
# ファイルサイズの合計 : size (byte)
size=$( ls -l ${dire} | awk '{ i += $5 } END{print i}' )
# echo ${size}
if [ ${unit} = K ] ; then
      size_o=`echo "scale=2 ; ${size} / 1024 " | bc `
elif [ ${unit} = M ] ; then
      size_o=`echo "scale=2 ; ${size} / 1048576 " | bc `
elif [ ${unit} = G ] ; then
      size_o=`echo "scale=2 ; ${size} / 1073741824 " | bc `
else
     echo "Please set size K or M or G . "
     exit 1
fi
echo "Size = " ${size_o} ${unit}"Byte"
exit 0

実行例は、以下の通りです。

% ./filesum.sh K /tmp
Size =  130.88 KByte

なお、対象ディレクトリより下にディレクトリを掘っていないという前提で作成しています。もし、指定
ディレクトリより下の全てのファイルを対象としたい場合は、修正が必要になります。

任意の行を切り出す [bash]

コメントをどうぞ


任意の行(2行目から最後から2番の行まで)を取り出す必要があった。そこで bash のスクリプトを作成した。
以下は、其の一部。

a=$( wc file01.txt | awk '{print $1 }' )
b=$(( ${a} - 1 ))                # 何行目まで必要なのか、最終行のひとつ前
c=$(( ${b} - 1 ))                # 必要な行 - はじまりの行 + 1 (別の例で説明)
head -n ${b} file01.txt | taril -n ${c} >> test01.txt

わかりやすい例をあげると、全体で 1000 行のファイルあり、25 行目あから 800 行目を表示したいばあい、
変数 a, b, c はそれぞれ以下の様になる。

a = 1000
b = 800
c = ( 800 -25 + 1) = 776

これをhead と tail にそれぞれ、指定すれば任意の行を抜き出すことがか可能です。

head -n ${b}  file01.txt | tail -n ${c}

行頭、行末に ” を追加

コメントをどうぞ


職場で使用しているシステムのログに加工する際にスクリプトを作成した。

その時のメモ。sed を使用。

あるデータの行頭に ” を付ける。

% head -n 1 file01.txt | sed -e 's/^/\"/ ' > test01.txt

データの行末に ” を付ける

% tail -n 1 file01.txt | sed -e 's/$/\"/' >> test01.txt