配列に検索内容を追加する

配列に検索内容を追加する

現在、find出力に基づいてRコマンドを生成するスクリプトがあります。

#!/bin/bash
PATHX="/path/to/my/files"
find "${PATHX}" -maxdepth 1 -type f -name "*.csv" | while read d; do
FN=$(echo -n "${d}" | cut -d/ -f5 | cut -d. -f1)
echo "${FN}<-read.csv(\"${PATHX}/${FN}.csv\",header=TRUE)"
# <snip> etc .etc. etc.
echo "${FN}_2y<-tail(${FN}_log,730)"
done

これは素晴らしい作品です。しかし、Rコマンドを使用すると問題が発生しました。

df<-data.frame(list,of,columns,goes,here)

これを上記のfind / whileに統合する方法がわかりません。つまり、リストを出力する必要があります。${FN}_2年data.frame() 関数を入力してください。

たとえば、私のスクリプトが次のように出力されるとします。

  • a_2y
  • b_2y
  • c_2y

df<-data.frame(a_2y,b_2y,c_2y) で終わる必要があります。

コメントの質問をより明確にするために、すべてのcsv入力が解析された後、最後に1つのdata.frameインスタンスのみが必要です。

ベストアンサー1

名前を変数として収集fnsし、最後にその変数をエコーできます。パイプがあるので、変数をwhile / do / doneと同じサブシェルに保持する必要があります。${fns:1}最初の追加コンマが削除された変数の部分文字列。

#!/bin/bash
PATHX="/path/to/my/files"
find "${PATHX}" -maxdepth 1 -type f -name "*.csv" |
(   fns=
    while read d; do
        FN=$(echo -n "${d}" | cut -d/ -f3 | cut -d. -f1)
        echo "${FN}<-read.csv(\"${PATHX}/${FN}.csv\",header=TRUE)"
        # <snip> etc .etc. etc.
        echo "${FN}_2y<-tail(${FN}_log,730)"
        fns+=",${FN}_2y"
    done
    echo "df<-data.frame(${fns:1})"
)

おすすめ記事