質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

Q&A

2回答

195閲覧

GNUのcsplitとBSDのcsplitは挙動が違う?

miminashi

総合スコア22

UNIX

UNIXとは、AT&Tのベル研究所で開発されたコンピューター用のマルチユーザー・マルチタスクのオペレーションシステム(OS)です。政府や教育機関や研究所で広範囲に採用されています。

0グッド

1クリップ

投稿2019/04/30 14:23

csplitの挙動がGNUとBSDでかなり違うようなのですが、POSIX的にはどちらが正しいのでしょうか?
(サンプルは 逆引きUNIXコマンド/指定したキーワードでファイルを分割する・csplit より拝借しました)

GNU版

shell

1user@demo:~$ cat denpyo.txt 2PRODUCT NO: 1 3PRODUCT NAME: SQL SOFTWARE 4PRODUCT PRICE: 100 5PRODUCT NO: 2 6PRODUCT NAME: OS SOFTWARE 7PRODUCT PRICE: 200 8PRODUCT NO: 3 9PRODUCT NAME: HTML SOFTWARE 10PRODUCT PRICE 300 11PRODUCT NO: 4 12PRODUCT NAME: NETWORK SOFTWARE 13PRODUCT PRICE 400 14user@demo:~$ csplit -f denpyo/ denpyo.txt '/^PRODUCT NO:.*/' {2} 150 1660 1759 18123 19user@demo:~$ ls denpyo/ 2000 01 02 03 21user@demo:~$ cat denpyo/00 22user@demo:~$ cat denpyo/01 23PRODUCT NO: 1 24PRODUCT NAME: SQL SOFTWARE 25PRODUCT PRICE: 100 26user@demo:~$ cat denpyo/02 27PRODUCT NO: 2 28PRODUCT NAME: OS SOFTWARE 29PRODUCT PRICE: 200 30user@demo:~$ cat denpyo/03 31PRODUCT NO: 3 32PRODUCT NAME: HTML SOFTWARE 33PRODUCT PRICE 300 34PRODUCT NO: 4 35PRODUCT NAME: NETWORK SOFTWARE 36PRODUCT PRICE 400

BSD版

shell

1PRODUCT NO: 1 2PRODUCT NAME: SQL SOFTWARE 3PRODUCT PRICE: 100 4PRODUCT NO: 2 5PRODUCT NAME: OS SOFTWARE 6PRODUCT PRICE: 200 7PRODUCT NO: 3 8PRODUCT NAME: HTML SOFTWARE 9PRODUCT PRICE 300 10PRODUCT NO: 4 11PRODUCT NAME: NETWORK SOFTWARE 12PRODUCT PRICE 400 13mmns2016:~/projects/playground/csplit $ csplit -f denpyo/ denpyo.txt '/^PRODUCT NO:.*/' {2} 1460 1559 1660 1763 18mmns2016:~/projects/playground/csplit $ ls denpyo/ 1900 01 02 03 20mmns2016:~/projects/playground/csplit $ cat denpyo/00 21PRODUCT NO: 1 22PRODUCT NAME: SQL SOFTWARE 23PRODUCT PRICE: 100 24mmns2016:~/projects/playground/csplit $ cat denpyo/01 25PRODUCT NO: 2 26PRODUCT NAME: OS SOFTWARE 27PRODUCT PRICE: 200 28mmns2016:~/projects/playground/csplit $ cat denpyo/02 29PRODUCT NO: 3 30PRODUCT NAME: HTML SOFTWARE 31PRODUCT PRICE 300 32mmns2016:~/projects/playground/csplit $ cat denpyo/03 33PRODUCT NO: 4 34PRODUCT NAME: NETWORK SOFTWARE 35PRODUCT PRICE 400

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

BSDとPosixとGnuのman、Gnuのinfoを見比べると、オプションはBSDとPOSIXが同じですが、記述の文章自体は、

Gnu (Linuxにてinfo csplit)

Create an output file containing the current line up to (but not including) the next line of the input file that contains a match for REGEXP.

POSIX (Linuxにてman 1p csplit)

A file shall be created using the content of the lines from the current line up to, but not including, the line that results from the evaluation of the regular expression with offset, if any, applied.

BSD (FreeBSD 12のman csplit)

Create a file containing the input from the current line to (but not including) the next line matching the given basic regular expression. An optional offset from the line that matched may be specified.

で、同じ意味のことを書いてあり、他の部分の記述を見ても、man infoだけからは判断が難しいです。POSIXのより詳しいドキュメントか、ソースを見ないと。
「オプションの書式が同じなのでBSD仕様がPOSIX仕様では?」という推測は出来ます。

BSDでは「カレント行」の初期値が1行目で、Gnuでは「カレント行」の初期値が0行目ということなのでしょう。初期値が0行目というのはやや無理がある気がしますが。

投稿2019/05/01 05:31

otn

総合スコア84559

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/csplit.html

見た感じBSD版のほうが正しそうに見えますね。

投稿2019/05/01 05:06

otolab

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問