見つかったファイルのリストからn〜m行を抽出する

見つかったファイルのリストからn〜m行を抽出する

最終的には、各サブディレクトリの各CSVから行3-53を取得する必要があります。

次のファイルから次の行をインポートしました(「cat」は必ずしも必要ではありません)。

cat /[path]/[file].csv | head -53 | tail -51

私が必要とするファイルは次のとおりです(「検索」はい必須):

find /[path]/ -name "*.csv"

問題は、2つを接続できないことです。誰かが私を正しい方向に押してもらえますか?

答え1

この試み:

find /path/to/file/ -maxdepth 1 -type f -name '*.csv' -print0 | while read -d '' -r file; do sed -n '3,53p' $file; done

このオプションは、print0ファイル名に存在できるすべての空白文字を処理します。

答え2

私が正しく理解したなら、次のことが役に立つと思います。

スクリプト/ライン:

$ for csv_files in $(find /home/t1/ -name "*.csv"); do echo $csv_files ; done

出力:

/home/t1/t4/t4.csv
/home/t1/t1/t1.csv
/home/t1/t2/t2.csv
/home/t1/t3/t3.csv

echo代わりに、2番目のコマンドを挿入できます。cat $csv_files | head -53 | tail -51

完成度を上げるために、次のechoコード行を次のように置き換えました。

$ for csv_files in $(find /home/t1/ -name "*.csv"); do cat $csv_files | head -53 | tail -51; done 

答え3

findselfを使用してこれを行うことができます。

find path -type f -name '*.csv' \
-exec sh -c 'for f; do head -n 53 "$f" | tail -n 51; done' _ {} + 

関連情報