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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

Q&A

解決済

2回答

9089閲覧

シェルスクリプトでカンマ区切りのファイルを読み込み変数に格納(行内の個数は可変)

kingg

総合スコア11

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Linux

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

0グッド

0クリップ

投稿2018/04/05 22:43

前提・実現したいこと

シェルスクリプトでカンマ区切りのファイルを読み込み、その値を変数に格納したいです。
対象ファイルは下の様に行によって個数が違っています。
もし個数が統一されているなら次のようにして格納することができることは分かりました。
よろしくお願いします。

file=cat test.txt
for i in ${file[@]}
do
num1=echo ${i} | cut -d ',' -f 1
num2=echo ${i} | cut -d ',' -f 2
num3=echo ${i} | cut -d ',' -f 3
num4=echo ${i} | cut -d ',' -f 4
echo $num1 $num2 $num3 $num4
done

0,2,1,3,
4,7,6,5,
8,11,
9,10,
12,14,13,15,
16,19,17,18,
20,21,
24,25,26,27,
28,29,30,31,
32,35,33,34,
36,39,37,
40,41,43,42,
44,46,47,45,
48,51,49,50,
52,53,55,54,
56,57,58,59,
60,62,63,61,
64,66,67,65,
68,69,71,70,
22,23,38,75,119,174,175,178,202,204,205,206,207,208,211,

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

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

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

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

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

guest

回答2

0

ベストアンサー

配列に読み込むと良いでしょう。

Bash

1IFS=, 2while read -a nums 3do echo ${nums[@]} 4done < test.txt

投稿2018/04/05 23:09

otn

総合スコア84507

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

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

kingg

2018/04/07 02:29

回答ありがとうございました。 その方法で解決したのでベストアンサーにさせていただきます。
guest

0

ひよっこシェル芸人ですが、燃えるテーマですね!
ひとまず2パターン。

Bash

1for l in $(cat sample.txt) ; do IFS=, ; set -- $l ; echo $1 $2 $3 $4 ; unset IFS ; done

Bash

1cat sample.txt | awk 'BEGIN{ FS = "," } { print $1, $2, $3, $4 }'

追記:
こんなのもありました。
https://qiita.com/hasegit/items/5be056d67347e1553f08

Bash

1IFS=, ; while read a b c d e ; do echo $a $b $c $d ; done < sample.txt

恥の上塗り:
ゴールが「個数が任意の要素を最後まで変数に格納し、表示する」だと、配列使うしか手がないので、だいたいotnさんの回答以外の解は無さそうです。。。敗北。
set使うやつが、一応最後まで変数に格納、まではできているんですがねぇ。

投稿2018/04/06 00:19

編集2018/04/06 04:37
kazto

総合スコア7196

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

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

otn

2018/04/06 04:09

いや、個数が4と固定されてない場合の質問ですよ。
kazto

2018/04/06 04:24

む、これは早合点しましたね。。。列数が何個でも最初の四個とるには?と読んでしまいました。。。 修正します。
kingg

2018/04/07 02:31

回答ありがとうございました。 自分の質問が分かりづらい所がありすみません。 setのコマンドは知らなかったので勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問