Aqui vai
awk '{for (i=2; i<=NF; ++i) print $1, $i}' file
A B
A C
1 2
1 3
1 4
Eu quero saber se existe uma maneira fácil de dividir uma linha em um arquivo em várias linhas, como esta:
Eu tenho
A B C
1 2 3 4
E eu quero algo assim, baseado na primeira string da linha:
A B
A C
1 2
1 3
1 4
Basicamente, com base na primeira string da linha, crie várias linhas com a segunda, terceira e quarta cadeia e assim por diante.
usando o bash -
while read x ; do set $x ; first=$1 ; shift; for i in $* ; do echo $first $1; shift; done ; done < /tmp/1
A B
A C
1 2
1 3
1 4
printf %s\n 'A B C' '1 2 3 4'|
sed -e's/\([^ ]*\) *[^ ]*/&\n/;//P;D'
A B
A C
1 2
1 3
1 4
Isso funciona. Seleciona as duas primeiras seqüências de zero ou mais caracteres não espaciais, separados por um ou mais espaços. A primeira dessas sequências é referenciada em e toda a seleção em
&
. A seleção é substituída por ela mesma seguida por \n
ewline e, em seguida, . O espaço padrão é então impresso até a primeira linha que está ocorrendo, e então a mesma parte é
D
eletida antes que o espaço padrão seja reciclado para o topo do script com o que resta.
Você pode ver o que faz com o comando l
ook. Substitua o P
w / l
e coloque outro l
antes do s///
ubstitution ...
A B C$
A B\nA C$
A C$
A C\nA$
A$
1 2 3 4$
1 2\n1 3 4$
1 3 4$
1 3\n1 4$
1 4$
1 4\n1$
1$
printf %s\n 'A B C' '1 2 3 4'|
sed -ne:t -e'/ *[^ ]*/{s//\n&/2;P;s///;} -ett
A B
A C
1 2
1 3
1 4
Ele corresponde a um espaço de padrão com pelo menos uma sequência de caracteres de espaço e qualquer espaço não-traçado. A primeira substituição insere uma nova linha antes da segunda ocorrência de tal sequência, então P
rints até a nova linha, e a segunda substituição remove a primeira ocorrência desse padrão - que também incluirá agora a nova linha a primeira anexada à cauda daquela seqüência quando operando no segundo. O t
est ramifica de volta para o rótulo :t
cada vez que ocorre uma substituição e, portanto, sed
consome espaço de padrão um campo separado por espaço de cada vez.
Com l
ook novamente:
A B C$
A B\n C$
A C$
A C$
1 2 3 4$
1 2\n 3 4$
1 3 4$
1 3\n 4$
1 4$
1 4$
Tags text-processing