- 締切済み
シェルスクリプトで複数ファイルを交互に操作する方法
Bシェルのスクリプトで複数のファイルを交互に操作したいと考えています。 例えば、 A.txt A A B.txt B B という2つのファイルがあったとして、これを交互に読み取り、 C.txt A B A B というファイルを作成したいと考えています。 現在は1行ごとに別ファイルを作成し、最後にそれをマージするという変な方法をとっています。 awkやperlを使用しないで、純粋にBシェルのスクリプトだけでスマートに実現するにはどのような方法がありますでしょうか。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- Lean
- ベストアンサー率72% (435/603)
スマートではないかもしれませんが、以下のシェルスクリプトではどうでしょうか? 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<-------
- anights
- ベストアンサー率72% (35/48)
$ paste -d "\n" A.txt B.txt > C.txt では、どうでしょうか。