从文件中读取行的脚本

时间:2017-07-03 10:41:51

标签: bash unix

我有一个1000行的文件。我需要每次读取该文件10/20行并执行它们或将其保存到其他文件中。下次它应该从11/21读取文件并执行相同的操作。这应该在EOF之前完成。

从文件中读取时如何限制数量?

感谢任何帮助。

提前致谢!

3 个答案:

答案 0 :(得分:1)

您可以使用多个工具从文件中提取一系列行。其中一个是sed。例如,用于提取行10到20的语法将是sed -n '10,20p' input.txt。由于您不太清楚所需输出的所有细节,这里有一个使用for循环的解决方案:

N=$(cat input.txt | wc -l)
di=10
((di1=di+1))
for ((i=1; i<=N; i+=di1)); do
   ((j=i+di))
   sed -n "${i},${j}p" input.txt > output${i}.txt
done

这会创建名为outputX.txt的新文件,其中Xinput.txt中块的第一行的编号。

答案 1 :(得分:0)

以下脚本将从文件“input-file.txt”一次读取“N”行(来自控制台的用户输入),并且每次执行它们并将它们存储到新文件中。

#!/bin/bash

# Create new file handle 5
exec 5< input-file.txt

read_n() { for i in $(seq $1); do read || return; echo $REPLY; done; }

echo "Enter the number of lines to read each time"
read N

while lines="$(read_n $N)" ; do

# executing N lines one by one.
while read -r line; do
   echo "Executing \" $line \" command"
   exec "$line" &
   echo "++++++++++++++++++++++++++++++"
done <<< "$lines"

# saving the N lines to another file.
echo "$lines"  >> output-file.txt

done <&5

# Close file handle 5
exec 5<&-                                                                                                                                                                                                   

另请参阅:Read n lines at a time using Bash

答案 2 :(得分:0)

以下awk解决方案将一次打印几行10行:

awk '{ data[NR]=$0 } END { strt=1;for ( i=strt;i<=NR;i=i+10 )  { end=strt+9;for ( p=strt;p<=end;p++) { print data[p] } strt=end+1 } }'  filename

我们首先将所有数据放入一个数组中,然后使用2个循环遍历数组。第一个指示20行,然后第二个打印这些批次中的行(您可以执行此处需要的其他处理)