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

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

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

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

Q&A

解決済

2回答

2288閲覧

grepを使用して任意の文字で始まるレコード数を重複削除し抽出

Navy_boy_SUA

総合スコア5

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

0グッド

0クリップ

投稿2019/09/19 19:13

編集2019/09/21 14:45

前提・実現したいこと

コマンドラインを使用し大量のJSONファイルから任意の文字で始まるレコード数を表示した上で、重複を削除し指定した文字で始まるhorseLabelの合計値を抽出したいと考えております。

おそらくは以下の行程かと目星をつけて取り組んでいるのですが、任意の文字を絞り込む行程で意図してないレコードも(見たところ全レコードが表示され正規表現が効いていないように見受けられます)が表示されてしまいます。
1.grepでファイル内の対象レコードを抽出
2.パイプでgrepを繋いで任意の文字で絞り込み
3.uniqで重複を削除しcatでレコード数を表示
また、末尾にレコード数を表示させる意図で冒頭にcatをつけると以下のエラーが表示されてしまいます。

発生している問題・エラーメッセージ

【第二行程までを実現しようとした場合】 grep -h horselabel *.json | grep '^[A]*' ⇨horseLabelの全レコードが表示されてしまう 【cat及びuniqを使用した際のエラー】 cat: write error: Broken pipe

試したこと

cat *.json | grep -h horseLabel '^[A]' | sort | uniq

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

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

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

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

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

KojiDoi

2019/09/19 21:25

「試したこと」で書いてある内容が、明らかにその前の説明と矛盾しています。実際にはどうやったのかを正確に書いてください。
KojiDoi

2019/09/19 21:29

また、「horseLabelの合計値」とは何でしょうか。みたところ数値データではないので、文字通りの「合計」を出すのは不可能に見えます。ファイルの数? 行数? 正確に説明してください。
guest

回答2

0

ベストアンサー

^[A]*は、「行頭にAが0文字以上」なので、すべての行が該当しますよ。

"horseLabel": "Aという文字列を含んだ行を数えたいなら、

sh

1grep -h '"horseLabel": "A' *.json | sort -u | wc -l

でしょうか。そのまま書けばいいです。

catでレコード数を表示

の意味が分からないので、とりあえずwcで行数を数えるように書きました。

投稿2019/09/20 00:09

otn

総合スコア84423

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

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

Navy_boy_SUA

2019/09/21 14:41

拙い説明にも関わらず意図を汲み取って頂きありがとうございます!頂いた方法にて解決いたしました!
guest

0

いまいちしたいことが理解できていませんが、以下の様なことでしょうか?
jsonのデータを4つ用意します。

bash

1$ ls *.json 2C.json a.json b.json d.json 3$ for item in `ls *.json`; do cat $item 4> done 5{ 6"horse": "http://www.wikidata.org/entity/Q1001792", 7"horseLabel": "akybe Diva", 8} 9{ 10"horse": "http://www.wikidata.org/entity/Q1001792", 11"horseLabel": "Makybe Diva", 12} 13{ 14"horse": "http://www.wikidata.org/entity/Q1001792", 15"horseLabel": "AAAAMakybe Diva", 16} 17{ 18"horse": "http://www.wikidata.org/entity/Q1001792", 19"horseLabel": "AAAAMakybe Diva", 20} 21

bash

1$ grep -h horseLabel *.json 2"horseLabel": "akybe Diva", 3"horseLabel": "Makybe Diva", 4"horseLabel": "AAAAMakybe Diva", 5"horseLabel": "AAAAMakybe Diva", 6$ grep -h horseLabel *.json|grep -F ': "A' 7"horseLabel": "AAAAMakybe Diva", 8"horseLabel": "AAAAMakybe Diva",

もしかしてgrepがjsonファイルを解析してくれると勘違いしていませんか?

投稿2019/09/19 19:50

nandymak

総合スコア799

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

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

Navy_boy_SUA

2019/09/21 14:43

説明が至らずotnさんの方法にて解決致しましたが、ご回答ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問