我正在尝试编写一个循环来读取文本文件并打印所有以(t :)开头的行。循环应该打印多达200行,其中包含(t :) word到输出文件。以(t :)开头的其余单词应该在其他output.file中打印如何执行此操作?
基本上脚本应该做的是它不应该打印超过200行。如果有超过200行,则其余行应打印在另一个输出文件中。
例如
文本文件包含
(t:) should print in other output.
sfsfsaff
(t:) blablabla
(t:) should print in other output.
(t:) blablalbalbalbalba
blalblabalbalbab
balbalbablaba
balbablalbalba
balbalbalbab
ablablalbab.
(t:) blablabla
(t:) blablabla
output.txt
(t:) should print in other output.
(t:) blablabla
(t:) should print in other output.
(t:) blablalbalbalbalba
(t:) blablabla
(t:) blablabla
答案 0 :(得分:3)
你甚至不需要循环。您可以使用现有工具并将它们组合在良好的'unix传统:
中cat inputfile | grep "^t\:" | split -l 200
当然,如果输出中不需要,您仍然可以进行修改,例如过滤掉前导t:
...
有关详细信息,请阅读grep
和split
命令的手册页......
答案 1 :(得分:1)
使用以下awk脚本:
awk '/^\(t:\)/{if(++c <= 200){print >> "outfile1"}else{print >> "outfile2"}}' infile
答案 2 :(得分:0)
>file1; >file2; N=0; cat myfile | while read f; do T=`echo "$f" | grep "^t:"`; if [ "$T"x = x ] then; N=`expr $N + 1`; fi; if [ "$N" -lt 200 ] then; echo "$f" >> file1; else; echo >> file2; fi; done
这几乎可以在任何shell中使用,并且不依赖于bash作为shell。