假设我有一个项目列表(每个项目占一行),例如:
apple
banana
grape
orange
...
...
我想在每个项目之前和之后放置一些固定文本;输出txt
文件应如下所示:
SOMETEXT1
SOMETEXT2
apple
SOMETEXT3
SOMETEXT1
SOMETEXT2
banana
SOMETEXT3
SOMETEXT1
SOMETEXT2
grape
SOMETEXT3
SOMETEXT1
SOMETEXT2
orange
SOMETEXT3
...
...
SOMETEXT1
,SOMETEXT2
并且SOMETEXT3
是常数。
我该如何实现这一点?可以使用任何语言。该列表有近 10^7 个项目。
答案1
和awk
:
awk '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file
如果要替换当前文件,请使用-i inplace
, 和 GNU awk
:
gawk -i inplace '{printf "%s\n%s\n%s\n%s\n", "SOMETEXT1", "SOMETEXT2", $0, "SOMETEXT3"}' input-file
只要SOMETEXT*
没有引号,这就会起作用 - 在这种情况下,您必须转义这些引号。
答案2
使用sed
:
sed 's/^/SOMETEXT1\nSOMETEXT2\n/; s/$/\nSOMETEXT3/' input.txt
答案3
我注意到您的示例列表以 SOMETEXT3 开头,因此我在编写下面的示例时考虑到了这一点。
#!/bin/bash
sourceList=/path/to/source.list
newfile=/path/to/newfile
while read Line; do
echo $SOMETEXT3 >> $newfile
echo Line >> $newfile
echo $SOMETEXT1 >> $newfile
echo $SOMETEXT2 >> $newfile
done < $sourceList
答案4
你可以在 Ex 模式下使用 Vim:
ex -sc '%s/.*/SOMETEXT1\rSOMETEXT2\r&\rSOMETEXT3/|x' file
%
选择所有行s
代替x
保存并关闭