1

我正在尝试编写一个循环来读取文本文件并打印以 (t:) 开头的所有行。循环应该打印多达 200 行包含 (t:) 字的输出文件。其余以 (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

输出.txt

    (t:) should print in other output.
    (t:) blablabla
    (t:) should print in other output.
    (t:) blablalbalbalbalba
    (t:) blablabla
    (t:) blablabla
4

3 回答 3

3

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

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

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

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

于 2013-05-06T08:35:55.210 回答
1

使用以下 awk 脚本:

awk '/^\(t:\)/{if(++c <= 200){print >> "outfile1"}else{print >> "outfile2"}}' infile

于 2013-05-06T08:40:07.140 回答
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。

于 2013-05-06T08:37:35.193 回答