我需要读取一个文本文件并每隔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
答案 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