从文件中读取行集

从文件中读取行集

我有一个 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

这可以“轻松地”扩展到一次读取二十行。

答案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处理多个变量)、 (使用工作模型尽快处理行)或这些的组合。$lineNparallel

答案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 行的块,并从每个块中随机选择一行 ( shuf -n 1)

split -l 20 --filter='shuf -n 1' input_file

sama 命令(split)可用于为每个块创建一个文件:

split -l 20 input-file input-file-chunk-

创造input-file-chunk-aa nput-file-chunk-ab

相关内容