Você pode usar
sed -nr 's/Order:([0-9]+),.*[,\|]38=([0-9]+)[,\|].*/Orderid- 38= /p' file | tee file2
Então
sed -nr 's/.*[,\|]11=([0-9]+)[,\|].*/Clientid=/p' file | tee file3
Então
paste -d ' ' file2 file3
Você obtém sua saída em stdout - redirecionamento como quiser.
Eu não consigo em uma linha (embora alguém obviamente possa ) desde o 11=
e 38=
campos podem estar em qualquer ordem - eu tenho que ler o arquivo duas vezes. Você poderia colocá-lo em um script como este:
#!/bin/bash
sed -nr 's/Order:([0-9]+),.*[,\|]38=([0-9]+)[,\|].*/Orderid- 38= /p' "" > file2
sed -nr 's/.*[,\|]11=([0-9]+)[,\|].*/Clientid=/p' "" > file3
paste -d ' ' file2 file3 > outfile
rm file2 file3
(isso limpa os arquivos que gravamos no processo e grava a saída final em um arquivo outfile
)
Uso:
- cole o script em um arquivo vazio e salve-o
- conceda permissão de execução:
chmod u+x script
- execute-o com o nome do seu arquivo de entrada como argumento:
./script file
- altere
file2
efile3
no script se você tiver arquivos existentes com esses nomes no diretório atual!
Explicação
-
s/old/new
replaceold
comnew
-
-r
use ERE -
-n
não imprime até que nós perguntemos (isto é apenas tirar linhas vazias) -
[,\|]
correspondência,
OU literal|
-
([0-9]+)
de alguns dígitos para guardar para mais tarde -
backreference para o padrão salvo
-
tee
escreve em um arquivo e imprime para o stdout também para que você possa verificá-lo -
> somefile
redireciona a saída parasomefile
em vez de stdout -
paste -d ' ' file2 file3
cole as colunas do arquivo3 depois das colunas do arquivo2 usando um espaço como delimitador. -
rm file2 file3
delete file2 e file3