Разбить одну строку на несколько строк, сохранив первый столбец

Я столкнулся с той же проблемой сегодня, и это помогло мне (Я запускаю Armbian на Pine64):

mv /etc/mono/config.dpkg-new /etc/mono/config

, а затем

apt install ca-certificates-mono

Я получил решение от здесь:

1
31.10.2021, 18:16
2 ответа

awk в любой оболочке на каждой системе Unix:

Если это табуляция между первым полем и остальной частью строки:

$ awk 'BEGIN{FS=OFS="\t"} {n=split($2,f," */ *"); for (i=1; i<=n; i++) print $1, f[i]}' file
'n      n
'n      [ ]
'n      m
'n      N
'ns     @ s
'ns     @ z
'ns     @
'ns     j @ z
'ns     j @ s
'r      r
's      s
's      z
's      [ ]

или если это набор пустых символов:

$ awk 'match($0,/[^ ]+ +/){key=substr($0,1,RLENGTH); n=split(substr($0,1+RLENGTH),f," */ *"); for (i=1; i<=n; i++) print key, f[i]}' file
'n       n
'n       [ ]
'n       m
'n       N
'ns      @ s
'ns      @ z
'ns      @
'ns      j @ z
'ns      j @ s
'r       r
's       s
's       z
's       [ ]

или если это фиксированное поле шириной 8 -символов спереди, вы можете сделать либо:

$ awk '{key=substr($0,1,8); n=split(substr($0,9),f," */ *"); for (i=1; i<=n; i++) print key, f[i]}' file
'n       n
'n       [ ]
'n       m
'n       N
'ns      @ s
'ns      @ z
'ns      @
'ns      j @ z
'ns      j @ s
'r       r
's       s
's       z
's       [ ]

или:

$ awk '{n=split(substr($0,9),f," */ *"); for (i=1; i<=n; i++) printf "%-8s%s\n", $1, f[i]}' file
'n      n
'n      [ ]
'n      m
'n      N
'ns     @ s
'ns     @ z
'ns     @
'ns     j @ z
'ns     j @ s
'r      r
's      s
's      z
's      [ ]
1
31.10.2021, 18:27
sed  "s/ /\//" filename| awk -F "/" '{for(i=2;i<=NF;i++)print $1,$i}'

выход

'n      n 
'n  [ ] 
'n  m 
'n  N        
'ns      @ s 
'ns  @ z 
'ns  @ 
'ns  j @ z 
'ns  j @ s        
'r      r        
's      s 
's  z 
's  [ ]   
0
05.11.2021, 08:06

Теги

Похожие вопросы