我有一个1000行的文件。我需要每次读取该文件10/20行并执行它们或将其保存到其他文件中。下次它应该从11/21读取文件并执行相同的操作。这应该在EOF之前完成。
从文件中读取时如何限制数量?
感谢任何帮助。
提前致谢!
答案 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
的新文件,其中X
是input.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<&-
答案 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行,然后第二个打印这些批次中的行(您可以执行此处需要的其他处理)