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

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

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

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Linux

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

Q&A

解決済

1回答

3680閲覧

linuxコマンドを使ったcsvファイル内の値の完全一致検索

megan

総合スコア9

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

Linux

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

AWK

AWKは、UNIX 上で開発されたプログラミング言語で、CSVファイルなどのテキストファイルの処理を目的にデザインされています。

0グッド

0クリップ

投稿2020/06/22 00:36

編集2020/06/22 00:38

前提・実現したいこと

csvファイル内のセルのうち、特定の数字に完全一致(例えば9.8)しているセルを持つ行を検索して、行番号と中身をlinuxコマンド(ubuntu16.04.6 LTS)で表示したいです。

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

(標準出力)

0,16.938,240.507,,,,,,,,,,,,,

上記のように9.8に一致しないセルを含む行も表示されてしまいます。
また、109.8など一部一致も除外して”9.8”に完全一致するセルのみを含む行の表示を行いたいです。

該当のソースコード


awk '/9.8/ {print}' filename.csv

試したこと


cat filename.csv | egrep \s*9.8$

->何も表示されない


grep -w "9.8" filename.csv

-> grep -w "9.8" filename.csv と同様に、完全一致したセルを含んでいない行も表示されてしまいます。

どなたがご存知の方がいらっしゃいましたら、ご教授いただければ幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

正規表現における.は「任意の一文字にマッチ」を指示する特殊記号(メタ文字)なので、ドット記号自体を検索したいなら、.のように、バックスラッシュを付けてエスケープしてください。

なお、「19.85」みたいな「途中に9.8を含むが、数値的には9.8ではないもの」を除外するなら、さらに正規表現を追加する必要があります。
質問文にあるgrepとawkでよければ、\<9.8\>で行けるはず。

投稿2020/06/22 00:40

編集2020/06/22 01:14
Daregada

総合スコア11990

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

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

megan

2020/06/22 00:45

早速ご回答いただき、ありがとうございます。この(小数点を含む数字)場合、バックスラッシュを付ける場所はどこになりますでしょうか。 --- awk '/9.8/ {print}' filename.csv --- の場合、上手く機能しません。お手数ですが、ご回答いただけましたら幸いです。
Daregada

2020/06/22 01:00

「上手く機能しません」とは、どのような状態になるのでしょうか。 手元のCentOS 7では、grepもawkも「9.8」と書くことで「938」は検索されず、「9.8」は検索することができています。
megan

2020/06/22 02:07

詳細にご回答いただき、ありがとうございました。 先ほどは、「9.8」と書くことで、「.」を含む値を検索することができましたが、「19.85」のような「途中に9.8を含むが、数値的には9.8ではないもの」を除外することができておりませんでした。「\<9.8\>」とすることで、「19.85」のようなケースを除外して「9.8」だけを検索することができました。 おかげさまで実現したかった検索を達成することができました。ご丁寧にご説明いただき、大変ありがとうございます。
Daregada

2020/06/22 02:12

その時点で「さらに正規表現を追加する必要があります」って書いてますよね。「19.85が除外できません。追加するのはどんな正規表現ですか」って質問ならわかるけど、「上手く機能しません」ではわかりようがないのです。
megan

2020/06/22 02:27

適切ではない書き方をしてしまい、大変申し訳ございませんでした。曖昧な質問の仕方をし、ご迷惑おかけいたしました。以後質問の仕方に十分気をつけるようにいたします。この度は、ご指摘・ご回答いただき、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問