我需要将两个具有固定行块的文本文件合并为一个。
bridge-domain AAAA
mac
aging
time 3
!
limit
maximum 12
notification both
!
port-down flush disable
!
igmp snooping profile igmp-snoop <---
在此行之后,我需要从另一个文本文件中添加一行行,如下所示:
interface Bundle-Ether AAAAA
igmp snooping profile igmp-snoop
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
!
所以基本上我需要从text2.txt中每6行读取一次,并将每12行追加到text1.txt中
期望的输出:
bridge-domain AAAA
mac
aging
time 3
!
limit
maximum 12
notification both
!
port-down flush disable
!
igmp snooping profile igmp-snoop
interface Bundle-Ether AAAAA
igmp snooping profile igmp-snoop
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
!
bridge-domain BBBB
mac
aging
time 3
!
limit
maximum 12
notification both
!
port-down flush disable
!
igmp snooping profile igmp-snoop
interface Bundle-Ether BBBB
igmp snooping profile igmp-snoop
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
!
等...直到文件结尾。
答案 0 :(得分:1)
这可能对您有用(GNU sed):
sed -e '12~12{:a;R file2' -e 'x;s/^/x/;/x\{6\}/!{x;ba};z;x}' file1
这将从file2依次读取file1中每12行六行。它在保留空间中使用一个计数器,该计数器在第六行之后重置。
答案 1 :(得分:1)
awk '
NR==FNR {
rec = rec $0 ORS
if ( (FNR % 6) == 0 ) {
recs[FNR/6] = rec
rec = ""
}
next
}
{ print }
(FNR % 12) == 0 ) { printf "%s", recs[FNR/12] }
' file2 file1
或者如果您希望简短而隐秘(因为您要求的解决方案不是简单的s / old / new),就可以这样做:
awk 'NR==FNR{r=r$0"\n";if(!FNR%6){s[++x]=r;r="";next}!(FNR%12){$0=$0 s[++y]}1' file2 file1
以上内容可在每个UNIX盒的任何shell中使用任何awk进行工作。
答案 2 :(得分:1)
这是一个awk
脚本,其中包含更多的测试示例。
input.1.txt
bridge-domain AAAA
mac
aging
time 3
!
limit
maximum 12
notification both
!
port-down flush disable
! -1
igmp snooping profile igmp-snoop 1
! 1.1
bridge-domain BBBB
mac
aging
time 3
!
limit
maximum 12
notification both
port-down flush disable
! -2
igmp snooping profile igmp-snoop 2
! 2.1
bridge-domain CCC
mac
aging
time 3
!
limit
maximum 12
notification both
port-down flush disable
! -3
igmp snooping profile igmp-snoop 3
! 3.1
input.2.txt
interface Bundle-Ether AAAAA
igmp snooping profile igmp-snoop
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! AAAA section end
igmp snooping profile igmp-snoop
interface Bundle-Ether BBBB
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! BBBB section end
igmp snooping profile igmp-snoop
interface Bundle-Ether CCCC
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! CCCC section end
script.awk
FNR == NR { # read insertion paragraph from file 1
inpSectn = inpSectn $0; # accumlate input lines in inpSectn
if (NR % 6 == 0) { # if 6th line add section to array
sectnArr[++arrCount] = inpSectn; # add inpSectn to ordered array
inpSectn = ""; # reset inpSectn
}
next; # skip further processing till all file 1 is consumed.
}
1 # output current input line.
FNR % 12 == 0 { # every 12th line in file 2
print sectnArr[++arrIdx]; # output section
}
运行:
awk -f script.awk input.2.txt input.1.txt
输出:
bridge-domain AAAA
mac
aging
time 3
!
limit
maximum 12
notification both
!
port-down flush disable
! -1
igmp snooping profile igmp-snoop 1
interface Bundle-Ether AAAAA
igmp snooping profile igmp-snoop
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! AAAA section end
! 1.1
bridge-domain BBBB
mac
aging
time 3
!
limit
maximum 12
notification both
port-down flush disable
! -2
igmp snooping profile igmp-snoop 2
igmp snooping profile igmp-snoop
interface Bundle-Ether BBBB
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! BBBB section end
! 2.1
bridge-domain CCC
mac
aging
time 3
!
limit
maximum 12
notification both
port-down flush disable
! -3
igmp snooping profile igmp-snoop 3
igmp snooping profile igmp-snoop
interface Bundle-Ether CCCC
dhcp ipv4 snoop profile
static-mac-address 0001
static-mac-address 0002
! CCCC section end
! 3.1