说我有内容
的file1line1
line2
line3
和另一个内容为
的文件2lineA
lineB
lineC
lineD
lineE
lineF
lineG
lineH
lineI
我想将file2设为
lineA
lineB
lineC
line1
lineD
lineE
lineF
line2
lineG
lineH
lineI
line3
答案 0 :(得分:1)
以下是使用paste
cat file2 | paste -d'\n' - - - file1
paste
的短划线参数意味着从标准输入读取,即cat file2
输出,而第四个参数是file1
。因此,使用三个破折号,我们将粘贴一个文件的每3行与另一个文件中的1,并且分隔符是换行符(-d'\n'
)。
这将适用于任何这些文件中的剩余行,因为当其中一个输入找到EOF
时,粘贴将继续。但是在这种情况下它可能会打印几个空行,所以你可以通过管道去任何命令来删除它们(假设你的文件中没有实际的空行),例如
cat file2 | paste -d'\n' - - - file1 | sed '/^$/d'
答案 1 :(得分:0)
这个python代码会这样做,你的案例中的参数将是
python interlace.py file1 file2 file3 3
如果您希望它就位,我建议您稍后使用mv file3 file2
。这是因为如果你在读取所有内容之前就开始写入文件2,那么可以覆盖它
import sys
if len(sys.argv[1:]) == 4:
file1 = open(sys.argv[1], 'r')
file2 = open(sys.argv[2], 'r')
file3 = open(sys.argv[3], 'w')
line_count = int(sys.argv[4])
current_counter = 0
for file2_line in file2.readlines():
current_counter += 1
file3.write(file2_line)
if current_counter == line_count:
file3.write(file1.readline())
current_counter = 0
for file1_line in file1.readlines():
file3.write(file1_line)
file3.close()
这也适用于file1提前用完行的情况,在这种情况下file2的行继续正常运行,而当file1有额外的行时,它们只会被添加到结尾。
答案 2 :(得分:0)
这可能适合你(GNU sed):
@Mock
ClientFactory clientFactoryMock;
@Mock
SoapServiceClient soapServiceClientMock;
@Test
public void myTest(){
...
//add record for soapServiceClientMock
Mockito.when(soapServiceClientMock.xxx()).return(...);
// and return soapServiceClientMock as getInstance() is invoked
Mockito.when(clientFactoryMock.getInstance()).return(soapServiceClientMock);
}
在第三行之后,随后是file2的每三行,从file1附加一行。
答案 3 :(得分:0)
使用awk和getline
:
awk '1;NR%3==0{if((getline < "file1")>0)print}' file2
lineA
lineB
lineC
line1
lineD
...
您可能会将其混淆为awk '1;NR%3==0&&(getline < "file1")' file2
(未经测试)。