com o awk:
awk '$1 == "NOTOK" {printf "%s", $0; next} 1' file
Estou tentando encontrar o comando sed para remover o final da linha (ou seja, obter a próxima linha para a corrente), mas somente se a linha começar com a cadeia NOTOK.
exemplo de entrada:
NOTOK something detected
details are : some info
a saída deve ser:
NOTOK something detected details are : some info
sed '/NOTOK/ { N; s/\n// }'
Se a sua implementação sed não suporta ;
para separar comandos (o GNU sed faz, mas não é padrão):
sed -e '/^NOTOK/ {' -e 'N' -e 's/\n//' -e '}'
Sed fica enigmático muito rapidamente; qualquer coisa que seja mais complexa que um ou mais comandos s
é um bom candidato para o awk.
awk '/^NOTOK/ {printf "%s", $0; next} 1 {print}'
ou
awk '/NOTOK/ {getline n; $0 = $0 n} 1'
Unindo linhas com ed
:
cat <<-'EOF' | ed -s file
H
$a
.
,g/^[[:space:]]*NOTOK/.,.+1j
,p
q
EOF
(Nota: use w
em vez de ,p
para edição de arquivos no local).
Aqui estão alguns:
Perl
perl -pe 'chomp if /^\s*NOTOK/' file
O -p
flag do perl faz com que ele imprima cada linha do arquivo de entrada, o -n
significa arquivos de leitura linhas por linha e aplica o script fornecido por -e
. chomp()
é uma função que simplesmente remove a nova linha ( \n
) do final de uma linha, portanto, nós apenas copiamos se a linha começar com NOTOK ( /^NOTOK/
).
awk
awk '{if($1~/NOTOK/){printf "%s", $0}else{print}}' file
ou
awk '$1~/NOTOK/{printf "%s", $0; next}1;' file
$1
é o primeiro campo em awk
. Se corresponder a NOTOK
, imprimiremos a linha sem nova linha no final ( printf
), caso contrário, imprimiremos a linha como está.
bash
while IFS="" read line; do
if [ $(expr index "$line" "NOTOK") -gt "0" ]; then printf "$line";
else echo "$line"; fi;
done < file
IFS
é o separador de campos de entrada que precisa ser definido como em branco para ler linhas inteiras (caso contrário, obteria apenas a primeira palavra). Assim, lemos cada linha do arquivo em $line
, depois verificamos se essa linha começa com NOTOK
e imprimimos sem uma nova linha no final (printf) ou com (eco) de acordo.
Tags text-processing awk sed