每n行插入一次字符串,同时在所需的字符串处重置行计数器

时间:2015-03-17 13:37:54

标签: perl shell awk sed command

我需要读取一个文本文件并每隔n行插入一个字符串,但是当遇到标题字符串时,还要重新启动行计数器。

使用代码重复每3行重复工作:

sed'0~3 s / $ / \ nINSERT / g'< INPUT / PATH / FILE_NAME.txt> OUTPUT / PATH / FILE_NAME.txt

我似乎无法找到如何在line = Header时重新启动计数器...我也尝试使用shell命令,但成功率却低得多。

离。输入:

 1. Header Line Here 
 2. dog 
 3. cat
 4. fish
 5. pony
 6. horse
 8. bird
 7. Header Line Here
 8. whale
 9. Header Line Here 
 10. shark
 11. lizard
 12. dolphin

必需的输出:

 1. Header Line Here 
 2. dog 
 3. cat
 4. INSERT
 5. fish
 6. pony
 7. horse
 8. INSERT
 9. bird
 10. Header Line Here
 11. whale
 12. Header Line Here 
 13. shark
 14. lizard
 15. INSERT
 16. dolphin

3 个答案:

答案 0 :(得分:3)

您可以使用awk轻松完成此操作:

awk '
  {print;++n}
  /Header Line Here/ {n=1}
  n==3 {print "INSERT";n=0}
'

答案 1 :(得分:0)

perl -pE'$a=1if/Header Line Here/;say"INSERT"unless$a++%3' file.txt

答案 2 :(得分:-1)

假设您需要每隔4行INSERT(将n的值取为4)

使用awk

可以很容易地实现这一点
awk '/Header/{flag=1} !(flag++%4){print "INSERT"}1' 

它的作用是什么?

  • /Header/{flag=1}如果该行与模式Header匹配,请将flag设置为1

  • !(flag++%4){print "INSERT"}flag%4 == 0然后print INSERT

  • 1始终为真,采取默认操作打印整个记录/行(另一个awk成语


<强>测试

$ cat input
Header Line Here 
dog 
cat
fish
pony
horse
bird
fish
Header Line Here
whale
Header Line Here 
shark
lizard
dolphin

$ awk '/Header/{flag=1} !(flag++%4){print "INSERT"}1' input
Header Line Here 
dog 
cat
INSERT
fish
pony
horse
bird
INSERT
fish
Header Line Here
whale
Header Line Here 
shark
lizard
INSERT
dolphin