如何将单行分成以.txt为分隔符的行

时间:2019-06-23 08:28:12

标签: bash awk

我正在基于.txt扩展名将以下文件拆分为行,该扩展名充当列标识符。

我想用bash / awk来做到这一点。我可以在实现该目标方面获得一些帮助吗?

原始文件

   5001-A.txt:Sun Jun 23 07:37:21.687 UTC 5001-A.txt: Active Packages: 8 5001-A.txt: ncs5k-xr-6.5.3 version=6.5.3 [Boot image] 5001-A.txt: ncs5k-mpls-3.1.0.0-r653 5001-A.txt: ncs5k-isis-2.1.0.0-r653 5001-A.txt: ncs5k-mpls-te-rsvp-1.0.0.0-r653 5001-A.txt: ncs5k-ospf-2.0.0.0-r653 5001-A.txt: ncs5k-mcast-2.1.0.0-r653 5001-A.txt: ncs5k-mgbl-3.0.0.0-r653 5001-A.txt: ncs5k-k9sec-3.1.0.0-r653 5001-B.txt:Sun Jun 23 07:36:17.743 UTC 5001-B.txt: Active Packages: 8 5001-B.txt: ncs5k-xr-6.5.3 version=6.5.3 [Boot image] 5001-B.txt: ncs5k-mpls-3.1.0.0-r653 5001-B.txt: ncs5k-isis-2.1.0.0-r653 5001-B.txt: ncs5k-mpls-te-rsvp-1.0.0.0-r653 5001-B.txt: ncs5k-ospf-2.0.0.0-r653 5001-B.txt: ncs5k-mcast-2.1.0.0-r653 5001-B.txt: ncs5k-mgbl-3.0.0.0-r653 5001-B.txt: ncs5k-k9sec-3.1.0.0-r653 540-A.txt:Sun Jun 23 07:29:10.954 UTC 540-A.txt: Active Packages: 10 540-A.txt: ncs540-xr-6.3.2 version=6.3.2 [Boot image] 540-A.txt: ncs540-mpls-1.0.0.0-r632 540-A.txt: ncs540-isis-1.0.0.0-r632 540-A.txt: ncs540-mcast-1.0.0.0-r632 540-A.txt: ncs540-mgbl-1.0.0.0-r632 540-A.txt: ncs540-ospf-1.0.0.0-r632 540-A.txt: ncs540-mpls-te-rsvp-1.0.0.0-r632 540-A.txt: ncs540-li-1.0.0.0-r632 540-A.txt: ncs540-eigrp-1.0.0.0-r632 540-A.txt: ncs540-k9sec-1.0.0.0-r632 5501-A.txt:Sun Jun 23 07:39:57.757 UTC 5501-A.txt: Active Packages: 7 5501-A.txt: ncs5500-xr-6.5.3 version=6.5.3 [Boot image] 5501-A.txt: ncs5500-mpls-2.1.0.0-r653 5501-A.txt: ncs5500-k9sec-3.1.0.0-r653 5501-A.txt: ncs5500-mgbl-3.0.0.0-r653 5501-A.txt: ncs5500-isis-2.1.0.0-r653 5501-A.txt: ncs5500-mpls-te-rsvp-3.1.0.0-r653 5501-A.txt: ncs5500-ospf-2.0.0.0-r653 5502-A.txt:Sun Jun 23 07:45:41.923 UTC 5502-A.txt: Active Packages: 9 5502-A.txt: ncs5500-xr-6.3.2 version=6.3.2 [Boot image] 5502-A.txt: ncs5500-mcast-2.1.0.0-r632 5502-A.txt: ncs5500-mpls-2.1.0.0-r632 5502-A.txt: ncs5500-mgbl-4.0.0.0-r632 5502-A.txt: ncs5500-mpls-te-rsvp-2.2.0.0-r632 5502-A.txt: ncs5500-ospf-2.0.0.0-r632 5502-A.txt: ncs5500-isis-1.3.0.0-r632 5502-A.txt: ncs5500-li-1.0.0.0-r632 5502-A.txt: ncs5500-k9sec-4.1.0.0-r632 55A1-A.txt:Sun Jun 23 07:42:04.974 UTC 55A1-A.txt: Active Packages: 7 55A1-A.txt: ncs5500-xr-6.5.3 version=6.5.3 [Boot image] 55A1-A.txt: ncs5500-mpls-2.1.0.0-r653 55A1-A.txt: ncs5500-k9sec-3.1.0.0-r653 55A1-A.txt: ncs5500-mgbl-3.0.0.0-r653 55A1-A.txt: ncs5500-mcast-2.1.0.0-r653 55A1-A.txt: ncs5500-isis-2.1.0.0-r653 55A1-A.txt: ncs5500-ospf-2.0.0.0-r653 9010-A.txt:Sun Jun 23 17:47:19.268 AEST 9010-A.txt:Default Profile: 9010-A.txt: SDRs: 9010-A.txt: Owner 9010-A.txt: Active Packages: 9010-A.txt: disk0:asr9k-services-infra-6.5.3 9010-A.txt: disk0:asr9k-services-px-6.5.3 9010-A.txt: disk0:asr9k-mpls-px-6.5.3 9010-A.txt: disk0:asr9k-mini-px-6.5.3 9010-A.txt: disk0:asr9k-optic-px-6.5.3 9010-A.txt: disk0:asr9k-li-px-6.5.3 9010-A.txt: disk0:asr9k-doc-px-6.5.3 9010-A.txt: disk0:asr9k-video-px-6.5.3 9010-A.txt: disk0:asr9k-bng-px-6.5.3 9010-A.txt: disk0:asr9k-mgbl-px-6.5.3 9010-A.txt: disk0:asr9k-mcast-px-6.5.3 9010-A.txt: disk0:asr9k-9000v-nV-px-6.5.3 9010-A.txt: disk0:asr9k-fpd-px-6.5.3 9010-A.txt: disk0:asr9k-k9sec-px-6.5.3 9010-B.txt:Sun Jun 23 17:47:23.925 AEST 9010-B.txt:Default Profile: 9010-B.txt: SDRs: 9010-B.txt: Owner 9010-B.txt: Active Packages: 9010-B.txt: disk0:asr9k-mini-px-6.6.2 9010-B.txt: disk0:asr9k-services-infra-6.6.2 9010-B.txt: disk0:asr9k-9000v-nV-px-6.6.2 9010-B.txt: disk0:asr9k-bng-px-6.6.2 9010-B.txt: disk0:asr9k-doc-px-6.6.2 9010-B.txt: disk0:asr9k-fpd-px-6.6.2 9010-B.txt: disk0:asr9k-k9sec-px-6.6.2 9010-B.txt: disk0:asr9k-li-px-6.6.2 9010-B.txt: disk0:asr9k-mcast-px-6.6.2 9010-B.txt: disk0:asr9k-mgbl-px-6.6.2 9010-B.txt: disk0:asr9k-mpls-px-6.6.2 9010-B.txt: disk0:asr9k-optic-px-6.6.2 9010-B.txt: disk0:asr9k-services-px-6.6.2 9010-B.txt: disk0:asr9k-video-px-6.6.2 9904-A.txt:Sun Jun 23 17:46:57.761 AEST 9904-A.txt:Default Profile: 9904-A.txt: SDRs: 9904-A.txt: Owner 9904-A.txt: Active Packages: 9904-A.txt: disk0:asr9k-mini-px-6.6.2 9904-A.txt: disk0:asr9k-services-infra-6.6.2 9904-A.txt: disk0:asr9k-9000v-nV-px-6.6.2 9904-A.txt: disk0:asr9k-bng-px-6.6.2

期望的输出

$ cat testfile.txt
5001-A.txt:Sun Jun 23 07:37:21.687 UTC
5001-A.txt: Active Packages: 8 
5001-A.txt: ncs5k-xr-6.5.3 version=6.5.3 [Boot image] 
5001-A.txt: ncs5k-mpls-3.1.0.0-r653 
5001-A.txt: ncs5k-isis-2.1.0.0-r653 
5001-A.txt: ncs5k-mpls-te-rsvp-1.0.0.0-r653 
5001-A.txt: ncs5k-ospf-2.0.0.0-r653 
5001-A.txt: ncs5k-mcast-2.1.0.0-r653 
540-A.txt: Active Packages: 10 
540-A.txt: ncs540-xr-6.3.2 version=6.3.2 [Boot image] 
540-A.txt: ncs540-mpls-1.0.0.0-r632 
540-A.txt: ncs540-isis-1.0.0.0-r632 
9010-A.txt: disk0:asr9k-9000v-nV-px-6.5.3
9010-A.txt: disk0:asr9k-fpd-px-6.5.3

谢谢。


@Cyrus,突出显示的行显示不正确。当我们在不同的.txt名称之间移动时会发生这种情况。

5001-B.txt: ncs5k-mcast-2.1.0.0-r653
5001-B.txt: ncs5k-mgbl-3.0.0.0-r653
5001-B.txt: ncs5k-k9sec-3.1.0.0-r653 540-A.txt:Sun Jun 23 07:29:10.954 UTC  <---
540-A.txt: Active Packages: 10
540-A.txt: ncs540-xr-6.3.2 version=6.3.2 [Boot image]
540-A.txt: ncs540-mpls-1.0.0.0-r632

1 个答案:

答案 0 :(得分:1)

使用GNU awk进行多字符RS,RT和\s速记:

$ awk -v RS='[^[:space:]]+[.]txt:' 'NR>1 && RT{sub(/\s+$/,""); print p $0} {p=RT}' file
5001-A.txt:Sun Jun 23 07:37:21.687 UTC
5001-A.txt: Active Packages: 8
5001-A.txt: ncs5k-xr-6.5.3 version=6.5.3 [Boot image]
5001-A.txt: ncs5k-mpls-3.1.0.0-r653
5001-A.txt: ncs5k-isis-2.1.0.0-r653