#!/bin/sh #ls /target/multiannovar/filtered/files > list.txt #list.txtを引数として # $ sh ./input_files.sh list.txt mkdir -p ./temp filename=$1 for line in `cat ${filename}` do fname="${line##*/}" #ファイルからヘッダ行を除く sed -e '1d' $line > ./temp/"$fname".temp.txt done #すべてのファイルを結合 cat ./temp/*.temp.txt > ./temp/input.txt
これとほぼ等価なPythonスクリプトを作成してみた。
途中に生成されるファイルもなくてスッキリしているかも。
import glob import csv import os if not os.path.exists("./temp"): os.makedirs("./temp") lst = glob.glob("*/*.txt") for f in lst: with open(f, 'r') as inp: reader = csv.reader(inp, delimiter='\t') next(reader) for row in reader: with open('./temp/input.txt', 'a') as oup: writer = csv.writer(oup, lineterminator='\n') writer.writerow(row)
長さも程よく短いし。
この場合入力ファイルはこのスクリプトと同じ場所となるので、実際の環境に合わせる必要がある。
このスクリプトの続きに先日作成したIDを追加する部分を足してやれば、スクリプト1発でSQLiteにインポートするファイルを生成できるわけだ。インポートはやはりどうしてもpythonから行えそうにないので、pythonからshell scriptを呼び出す方法を取らないとならないかな。
最初、生成されるファイルを元と同じディレクトリでinput.txtとしていて、ループがグルグル回って止まらなくなった。
なので出力されるファイルは別ディレクトリ推奨。