Unix,如何连接以15个数字开头的行
我有这样一个文件:Unix,如何连接以15个数字开头的行,unix,awk,sed,Unix,Awk,Sed,我有这样一个文件: 123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl 012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d 345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld 我希望得到这样的结果,从每一行开始,以15个数字开头,并用
123456789012345lksdlkssalkd
skdañsldkasñldkas+
slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf
ASLÑsa sLL SLD SdsDA
SLDALDK LÑD
SDFSADF
d
345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf
lfdld
我希望得到这样的结果,从每一行开始,以15个数字开头,并用空格替换中间行结尾:
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d
345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
有可能吗?您可以:
$ awk '/^[[:digit:]]{15}/{if (buf) {print buf} buf=$0; next}
{buf=buf FS $0}
END {print buf}' file
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d
345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
可借助于
sed
$ sed -r 's/[0-9]{15}/\n&/' file |
awk -v RS= -v ORS='\n' '$1=$1'
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf ASLÑsa sLL SLD SdsDA SLDALDK LÑD SDFSADF d
345678901234560 DÑLSAD SDLÑSlkfl fg fg kfglkfgklfd gf lfdld
这可能适用于您(GNU-sed):
用空格替换换行符,除非换行符前面有15个字符。我最喜欢我的解决方案:没有分支和sed
awk '/^[0-9]{15}/ && NR > 1 {sep="\n"} \
{printf "%s%s", sep, $0; sep = " "} END {print ""}' dat
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf ASLÃsa sLL SLD SdsDA SLDALDK LÃD SDFSADF d
345678901234560 DÃLSAD SDLÃSlkfl fg fg kfglkfgklfd gf lfdld
- 在匹配15位图案时,将分隔符设置为换行符,第1行除外李>
- 使用前导分隔符打印任何输入行,并将分隔符设置为空格李>
- 在末尾打印一个换行符李>
--re interval
或--posix
来使用区间表达式{15}
awk '/^[0-9]{15}/ && NR > 1 {sep="\n"} \
{printf "%s%s", sep, $0; sep = " "} END {print ""}' dat
123456789012345lksdlkssalkd skdañsldkasñldkas+ slkdñlaskd aslda lkl
012345678901234dkfskadflkdflkasdf ASLÃsa sLL SLD SdsDA SLDALDK LÃD SDFSADF d
345678901234560 DÃLSAD SDLÃSlkfl fg fg kfglkfgklfd gf lfdld