每 n 行插入一个字符串,同时将行计数器重置为所需的字符串
Insert String every n lines, while also resetting line counter at desired string
我需要读取一个文本文件并每 n 行插入一个字符串,而且当我遇到 header 字符串时还需要重新启动行计数器。
行每 3 行重复一次,使用代码:
sed '0~3 s/$/\nINSERT/g' < INPUT/PATH/FILE_NAME.txt > OUTPUT/PATH/FILE_NAME.txt
我似乎找不到如何在行=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
perl -pE'$a=1if/Header Line Here/;say"INSERT"unless$a++%3' file.txt
您可以使用 awk 轻松完成此操作:
awk '
{print;++n}
/Header Line Here/ {n=1}
n==3 {print "INSERT";n=0}
'
假设每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
始终为真,采用默认操作打印整个 record/line(另一个 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
我需要读取一个文本文件并每 n 行插入一个字符串,而且当我遇到 header 字符串时还需要重新启动行计数器。
行每 3 行重复一次,使用代码:
sed '0~3 s/$/\nINSERT/g' < INPUT/PATH/FILE_NAME.txt > OUTPUT/PATH/FILE_NAME.txt
我似乎找不到如何在行=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
perl -pE'$a=1if/Header Line Here/;say"INSERT"unless$a++%3' file.txt
您可以使用 awk 轻松完成此操作:
awk '
{print;++n}
/Header Line Here/ {n=1}
n==3 {print "INSERT";n=0}
'
假设每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
始终为真,采用默认操作打印整个 record/line(另一个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