複数のテキストソースの最初の行から配列を作成するにはどうすればよいですか?


8

それぞれ数行のテキストを持つファイルへのパスの配列があります。次のように処理された各ファイルの最初の行が入力された配列を作成したいと思います。

# this.txt first line is [Test this]
# another.txt first line is [Test another]
paths=(
  ./this/path/this.txt
  ./another/path/another.txt
)

for i in ${paths[@]}; do
  read -r line < $i
  lines+=$line
done

せいぜい、配列で取得した値は1つだけです。forループから探している配列を取得できないようです。私は多くのバリエーションを試しましたが、どこが間違っているのかを理解するのに苦労しました。

回答:


11

あなたが欲しかった

lines+=("$line")

+=WORD 文字列の連結(または追加)です。複合代入は、 +=(...)配列に値を付加します。

おそらくここですべての変数展開を引用lineすることもできます。行に空白が含まれている可能性がある場合は間違いなく必要ですが、他の場所でも問題が発生する可能性があります。


おかげで、私の試みのいくつかで、結果が2行の混合であるように見えたのは理にかなっています。
dimmech

4

Bashでは、行を直接配列に読み込むこともできます。現在の配列の長さ${#lines[@]}を挿入インデックスとして選択した場合は、それに追加できます。

for i in "${paths[@]}"; do
    mapfile -t -n 1 -O ${#lines[@]} lines < "$i"
done

あらすじ抜粋

mapfile mapfile [-n count] [-O origin] [-t] [array]

標準入力からインデックス付き配列変数配列 […]に行を読み込みます。オプションが提供されている場合、その意味は次のとおりです。

  • -n:最大でcount行コピーしますcountが0の場合、すべての行がコピーされます。

  • -O:インデックスoriginで配列への割り当てを開始します。デフォルトのインデックスは0です。

  • -t:読み取られた各行から末尾の改行を削除します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.