1000行のファイルがあります。ファイルを一度に10/20行ずつ読み込んで実行するか、別のファイルに保存する必要があります。次回は11月21日のファイルを読み、同じことを行う必要があります。 EOFまで実行する必要があります。
ファイルを読み取るときに数を制限する方法は?
答え1
一般的な話す:
while read -r one
do
read -r two &&
read -r three &&
read -r four &&
read -r five &&
read -r six &&
read -r seven &&
read -r eight &&
read -r nine &&
read -r ten &&
printf "%s\n" "$one" "$two" "$three" "$four" "$five" "$six" "$seven" "$eight" "$nine" "$ten"
## or whatever you want to do to process those lines
echo END OF SECTION
done < input-file
これは一度に20行を読むことで「簡単に」拡張されます。
答え2
これにより、次のようになります。
while read line1 && [do something with $line1]
do
read line2 && [do something with $line2]
read line3 && [do something with $line3]
[…]
done < file.txt
しかし、データ構造に行数が固定されていない場合、読み取りをN行に制限するのは奇妙です。通常、(単一のコマンドで複数の変数を処理xargs
する)、(ワーカーモデルを使用してできるだけ早く行を処理する)、または次の組み合わせを使用して一度に数行を読み取って並列性を達成しようとします。これら。$lineN
parallel
答え3
次のようにして5行を読むことができます。
N=5; # Number of lines to process together (YMMV)
cat input_file |
while IFS= read -r v1; do
eof=
for i in $(seq 2 "$N"); do
IFS= read -r "v$i" || { unset -v eof; break; }
done
${eof+:} break
echo "The 5 lines read in are: $v1 $v2 $v3 $v4 $v5"
done
答え4
ファイルをフィルタリングできますsplit
...
split -l 20 --filter='command' input_file
例:20行のブロックに分割し、各ブロックでランダムに1行を選択します(shuf -n 1
)。
split -l 20 --filter='shuf -n 1' input_file
samaコマンド(分割)を使用して、各ブロックのファイルを生成できます。
split -l 20 input-file input-file-chunk-
創作input-file-chunk-aa
nput-file-chunk-ab
など