与えられたアクション:headとtailを使用してファイルの2番目の部分(つまりデータ部分)を抽出するコマンドを作成します。
*見つかった内容:tail -n 52 (path) | head -n 51
は、この部分を抽出するための正しいheadコマンドとtailコマンドを提供します。
extractdataという実行可能なスクリプトに変換します。次に、findとextractdataを使用して、月ディレクトリにあるすべての.csvファイルの2番目の部分を取得し、出力をpolls.csvというファイルに保存するコマンドを作成します。
*今まで、私は次のことをする方法を見つけました。 vim extractdata
データ抽出時:
#!/bin/sh
#----------------------------------------------------------------------------
#A script used to extract the second section of a file (i.e. the data section)
#----------------------------------------------------------------------------
echo "Hello $USER."
tail -n 52 $1 | head -n 51
次の作業とこのスクリプトの実行方法は混乱しています。実行可能にするためにchmod 755を使用して権限を変更しましたが、プロセスで次に何が起こるのかわかりません。
(編集する):私が作成したスクリプトを実行する方法を見つけ、次のコマンドを使用すると期待どおりに動作します。
./extractdata/filepath/file.csv
今月のディレクトリにあるすべての.csvファイルをインポートし、polls.csvというファイルに入れる方法のこの部分でブロックされました。
(編集する):extractdataスクリプトに> polls.csvを追加すると、予想通り、headコマンドとtailコマンドがpolls.csvに保存されます。これで、ファイルパスディレクトリ内のすべての.csvファイルに対してこのコマンドを実行する方法を理解できます。
(更新):すべての.csvファイルから抽出されたデータをpolls.csvファイルに追加する操作を処理するスクリプトにループを追加する方法はありますか?
答え1
find . -iname '*.csv' | xargs -I {} tail -n 52 "{}" \| head -n 51 > polls.csv
ただし、headとtailの代わりにgrepを使用する必要があります。
答え2
スクリプトを使用せずに、findの-exec機能を使用してこれを実行できます。
for i in $(ls months)
do
find . -name \*.csv -exec tail -n 52 {} | head -n 51 >> /absolutePath/polls.csv \;
done