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
file2efile3no script se você tiver arquivos existentes com esses nomes no diretório atual!
Explicação
-
s/old/newreplaceoldcomnew -
-ruse ERE -
-nnã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 -
teeescreve em um arquivo e imprime para o stdout também para que você possa verificá-lo -
> somefileredireciona a saída parasomefileem vez de stdout -
paste -d ' ' file2 file3cole as colunas do arquivo3 depois das colunas do arquivo2 usando um espaço como delimitador. -
rm file2 file3delete file2 e file3