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

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

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

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

Q&A

解決済

2回答

3701閲覧

awkコマンド:カラム数の調査方法

ttoo

総合スコア126

Linux

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

0グッド

2クリップ

投稿2020/09/04 00:29

http://yamatatsu-blog.hatenablog.com/entry/2017/02/20/232819

上記サイトの、「ダブルクォートでカンマをエスケープしているCSVの場合」より、
csvファイルのカラム数を調査しようと考えております。

csvファイル

"aaa","bbb","ccc" "ddd","eee","fff" "ggg","hhh","iii" "jjj","kkk","lll,mmm"

この時上記csvファイルが例になっており、コマンドが下記のように記載がございます。

$ awk -F'","' '{print NF}' < sample.csv | uniq | wc -l -> 1

こちらについて、csvファイル4行目に記載のある、"lll,mmm"については、
例外として扱いたく、"~~,~~"の間に、「,」が入っていた場合はカラム数を増やすようにしたいです。
こちらはどのようなawkコマンドでカラム数を増やし、例外と扱うことができますでしょうか?

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

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

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

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

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

Zuishin

2020/09/04 01:08 編集

複雑な CSV を awk で扱うのはただの無意味な苦行(あるいはパズル)です。csvtool など別な方法の提案があると思いますから、それを採用してください。
ttoo

2020/09/04 01:09

csvtoolはなんですか?
hidezzz

2020/09/04 03:16

フィールド数計算の対象にする「,」と対象としない「,」の区別の基準について明確にしてください。 質問文の内容だと結果的に「"」の有無に関わらず「,」をフィールド数計算の対象とすればいいので、 「^F,」のようにして単純にすべての「,」をフィールド数計算の対象とすれば良いように思えます。
guest

回答2

0

ベストアンサー

「ダブルクォートでカンマをエスケープしているCSVの場合」より、

csvファイルのカラム数を調査しようと考えております。

全カラムがダブルクォートで囲まれているなら、カンマは無視して、ダブルクォートの数を数えて2で割れば良いです。

sh

1awk -F\" '{print (NF-1)/2}'

投稿2020/09/04 04:51

編集2020/09/05 09:11
otn

総合スコア85901

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

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

otn

2020/09/04 04:52

データの中にダブルクォートがエスケープされて埋め込まれているということでない限り、という条件がありますが。
guest

0

"lll,mmm"をひとつのデータとして読み込みたいのであれば、csvtoolなどのツール類を使って貰うとして、今回は「,で機械的に分けると何カラムになるか知りたい」のですよね。

terminal

1$ awk -F, '{print NF}' sample.csv | sort -u | wc -l 22

のように、,だけをフィールドセパレーターに指定すればいいのでは。

ちなみに、uniqでバリエーションを数えるならソートが必須です。

投稿2020/09/04 03:26

Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問