.tsvファイルでいっぱいのディレクトリがあり、各ファイルに対してgrepコマンドを実行して特定のテキスト行セットを抽出し、同様のファイル名を持つ関連テキストファイルに保存しようとしています。たとえば、ファイルを1つだけgrepする場合、grepコマンドは次のようになります。
grep -h 8-K 2008-QTR1.tsv > 2008Q1.txt
しかし、次のtsvファイルのリストがあります。
2008-QTR1.tsv
2008-QTR2.tsv
2008-QTR3.tsv
2008-QTR4.tsv
2009-QTR1.tsv
2009-QTR2.tsv
2009-QTR3.tsv
...
grep の後は、次のように保存する必要があります。
2008Q1.txt
2008Q2.txt
2008Q3.txt
2008Q4.txt
2009Q1.txt
2009Q2.txt
2009Q3.txt
どんなアイデアがありますか?
ベストアンサー1
ksh93/bash/zshで単純なfor
ループとパラメータ拡張を介して:
for f in *-QTR*.tsv
do
grep 8-K < "$f" > "${f:0:4}"Q"${f:8:1}".txt
done
今回はgrep
、ファイル(ファイル名に「-QTR」とファイル名の末尾に「.tsv」が必要なワイルドカードパターンに基づいてファイルリストが生成されます)を実行すると、出力がファイルにリダイレクトされます。名前に基づいて慎重に構成されています。
- ファイル名の最初の4文字 - 年
- この手紙
Q
- ファイル名の9番目の文字 - Quarter