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

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

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

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

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

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

Q&A

解決済

2回答

4504閲覧

Bashで空白行も含めて配列要素に代入するには?

hkjhjkhkjify

総合スコア3

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

シェルスクリプト

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

シェル

シェル(shell)はUnix や Linux 系のOSで使用されるコマンドインタプリタを指します。

0グッド

0クリップ

投稿2020/05/21 15:18

前提・実現したいこと

Bashでシェルスクリプトを勉強しております。
テキストファイルを読み込んで、その値をそれぞれ配列に格納したいのですが
一部の値が入力されていない場合に配列が詰めて格納されます。
NULLの場合も配列に格納するにはどのようにすれば良いでしょうか?

<sample.txt>
NAME=Tanaka Taro
AGE=30
ADDRESSS=Tokyo

NAME=Tom Brown
AGE=
ADDRESS=New York

NAME=Tanaka Jiro
AGE=40
ADDRESS=Osaka

該当のソースコード

IFS=$'\n'
ARY1=($(awk -F= '/NAME/ {print $2}' sample.txt))
ARY2=($(awk -F= '/AGE/ {print $2}' sample.txt))
ARY3=($(awk -F= '/ADDRESS/ {print $2}' sample.txt))

期待する値
AGE[0]=30
AGE[1]=
AGE[2]=40

実行した値
AGE[0]=30
AGE[1]=40
AGE[2]=

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

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

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

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

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

guest

回答2

0

ベストアンサー

区切り文字(IFS)が空白文字の時は、連続する区切り文字は1つの区切りとみなされちゃうようですね。

区切り文字を空白文字以外にすれば大丈夫です。
下記では\a(BEL:\x07)にしています。

Bash

1IFS=$'\a' 2ARY1=($(awk -v ORS="$IFS" -F= '/NAME/ {print $2}' sample.txt)) 3ARY2=($(awk -v ORS="$IFS" -F= '/AGE/ {print $2}' sample.txt)) 4ARY3=($(awk -v ORS="$IFS" -F= '/ADDRESS/ {print $2}' sample.txt))

投稿2020/05/22 01:11

otn

総合スコア85901

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

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

hkjhjkhkjify

2020/05/22 14:07

回答ありがとうございます。 教えて頂いた方法で、動作しました。
guest

0

少しスマートさに欠けますが、これでとりあえず目標は達せられそうです。

#!/bin/bash IFS=$'\n' ARY2=($(awk -F= '/AGE/ {print " " $2}' sample.txt)) i=0 for e in ${ARY2[@]}; do echo "array[$i] = ${e:1}" let i++ done

投稿2020/05/21 16:07

KojiDoi

総合スコア13692

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問