如何为行写while循环

时间:2013-05-06 08:20:45

标签: linux bash shell

我正在尝试编写一个循环来读取文本文件并打印所有以(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

3 个答案:

答案 0 :(得分:3)

你甚至不需要循环。您可以使用现有工具并将它们组合在良好的'unix传统:

cat inputfile | grep "^t\:" | split -l 200

当然,如果输出中不需要,您仍然可以进行修改,例如过滤掉前导t: ...

有关详细信息,请阅读grepsplit命令的手册页......

答案 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。