dポイントプレゼントキャンペーン実施中!

Bシェルのスクリプトで複数のファイルを交互に操作したいと考えています。
例えば、
 A.txt
  A
  A

 B.txt
  B
  B
という2つのファイルがあったとして、これを交互に読み取り、
 C.txt
  A
  B
  A
  B
というファイルを作成したいと考えています。
現在は1行ごとに別ファイルを作成し、最後にそれをマージするという変な方法をとっています。
awkやperlを使用しないで、純粋にBシェルのスクリプトだけでスマートに実現するにはどのような方法がありますでしょうか。

よろしくお願いします。

A 回答 (2件)

スマートではないかもしれませんが、以下のシェルスクリプトではどうでしょうか?


Linux上では動作確認はしていませんが、手元で動作確認出来る環境(FreeBSD)のbash上では動作したので多分大丈夫だとは思いますが、動作しなかった場合は済みません。

手元の環境ではbashが/usr/local/bin/bashなので、そこは環境にあわせて変更(/bin/shかな)してください。

○sample.sh
-------8<-------8<-------8<-------8<-------8<-------8<-------
#!/usr/local/bin/bash

exec 3< A.txt ; exec 4< B.txt ; exec 5> C.txt

fd=3 ; e3=0 ; e4=0

while :
do

read LINE 0<&$fd

st=$?

[ $st -ne 0 ] && { [ $fd -eq 3 ] && e3=1 || e4=1 ;}

[ $e3 -ne 0 -a $e4 -ne 0 ] && break

[ $st -eq 0 ] && echo $LINE >&5 || echo "" >&5

[ $fd -eq 3 ] && fd=4 || fd=3

done
-------8<-------8<-------8<-------8<-------8<-------8<-------

○実行例(FreeBSD/bash)
-------8<-------8<-------8<-------8<-------8<-------8<-------
%bash --version
GNU bash, version 3.1.17(0)-release (i386-portbld-freebsd6.2)
Copyright (C) 2005 Free Software Foundation, Inc.
%cat A.txt
A
A
A
A
%cat B.txt
B
B
B
B
B
B
%cat C.txt
cat: C.txt: No such file or directory
%./sample.sh
%cat C.txt
A
B
A
B
A
B
A
B

B

B

%
-------8<-------8<-------8<-------8<-------8<-------8<-------
    • good
    • 0

$ paste -d "\n" A.txt B.txt > C.txt


では、どうでしょうか。
    • good
    • 1

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