
Bシェルのスクリプトで複数のファイルを交互に操作したいと考えています。
例えば、
A.txt
A
A
B.txt
B
B
という2つのファイルがあったとして、これを交互に読み取り、
C.txt
A
B
A
B
というファイルを作成したいと考えています。
現在は1行ごとに別ファイルを作成し、最後にそれをマージするという変な方法をとっています。
awkやperlを使用しないで、純粋にBシェルのスクリプトだけでスマートに実現するにはどのような方法がありますでしょうか。
よろしくお願いします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.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<-------
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
xcopyで特定のファイルのみをコ...
-
【VBA】テキストファイルから特...
-
echoの出力の最後のスペースを...
-
複数のファイルの追加
-
ダウンロードするとメモ帳に表...
-
linuxのjoinコマンドがうまくい...
-
コマンドプロンプトで相対パス...
-
自動で表示されるメモ帳ありま...
-
リダイレクト >> を複数のファ...
-
コマンドプロンプトで標準エラ...
-
特定のファイルだけをサブディ...
-
コマンド実行結果を環境変数に...
-
バッチファイル 指定行の切り出し
-
バッチファイルで改行の出力
-
ワードのテキストボックスの中...
-
echo "abc" >> test.txt で、先...
-
コマンドにてテキストファイル...
-
ファイル名の一部を変更するバ...
-
NULLの置き換えについて
-
【DOSコマンド】for の デリミ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
echoの出力の最後のスペースを...
-
xcopyで特定のファイルのみをコ...
-
【VBA】テキストファイルから特...
-
echo "abc" >> test.txt で、先...
-
コマンドプロンプトで相対パス...
-
リダイレクト >> を複数のファ...
-
コマンドプロンプトで標準エラ...
-
バッチファイル 指定行の切り出し
-
バッチファイルのfor文を使って...
-
バッチファイル 現在のフォルダ...
-
コマンド実行結果を環境変数に...
-
バッチファイルで改行の出力
-
NULLの置き換えについて
-
.txtって、縦書きにはならない...
-
複数テキストファイル連結につ...
-
バッチコマンドの「set」で入力...
-
Diskpart のリダイレクトの質問...
-
特定のファイルだけをサブディ...
-
DOSプロンプト:一番速く10万...
-
nkfで全角ハイフンが半角になる...
おすすめ情報