私のフォルダ「Subj1」には、次の形式でソートされた複数の.txtファイルがあります。
regional_vol_GM_atlas1.txt
regional_vol_GM_atlas1_prop.txt
....
regional_vol_GM_atlas152.txt
各ファイルは、次の形式のデータで構成されます。
667869 667869
580083 580083
316133 316133
11398.1 11398.1
関連ファイル名とともにテキストファイルのデータをcsvファイルにエクスポートしたいと思います。
私はこれのためのコードを書いた
#!/bin/bash
for x in regional_vol*.txt; do
/bin/echo -n -e "$x\t"
done
paste regional_vol*.txt >> final_table.csv
各ファイルのデータをcsvファイルに貼り付けます。サンプル出力画像は以下の通りです。
しかし、出力から関連ファイル名をデータヘッダーにインポートしたいと思います。これらの出力を取得するには、どのようにコードを変更する必要がありますか?
以下は私が期待する出力の例です。
答え1
私の考えでは、あなたが望むのは単純なコマンドリダイレクトであり、改行文字を印刷する別のリダイレクトであるecho
可能性が高いです。echo
このような:
files="regional_vol*.txt"
dst=final_table.csv
# remove the hash sign here to truncate the destination before writing
# > $dst
for x in $files; do
/bin/echo -n -e "$x\t" >> $dst
done
echo >> $dst
paste $files >> $dst
または、printf
ループを次に置き換えます。
printf "%s\t" $files >> $dst
echo >> $dst
paste $files >> $dst
どちらもヘッダー行の末尾に追加のタブを印刷しますが、これは問題ではありません。
答え2
単純だがエレガントではない解決策は、各ファイルの最初の行にファイル名を追加することです。
for x in $(ls regional_vol*.txt | sort -n); do
echo ${x} > tmp-${x}
cat ${x} >> tmp-${x}
done
paste tmp-regional_vol*.txt > final_table.csv
rm tmp-regional_vol*.txt
答え3
(各ファイルが画像の列なので、ファイルを回転したとします。)
スクリプトでは、各ファイルはCSVに行として追加されます。 CSVの各行はスプレッドシートの行でなければなりません。
SEDとAWKを使用してファイルの内容を操作し、「filename、field1、field2、field3、...」文字列を構築します。 CSVに追加するには、この文字列をエコーしてください。
次に、画像でスプレッドシートを開くときにスプレッドシートで行ったのと同じ回転操作を実行します。または、一般的な「各行はアイテムです」形式を維持してください。ファイル名はタイトルではなくフィールドである必要があるため、実際にはお勧めします。つまり、ヘッダー名がfilenameのフィールドには、CSV内の各項目のファイル名を含める必要があります。