Acrescentar uma coluna

2

Eu vasculhei aqui e alguns outros lugares para tentar encontrar uma resposta para isso, mas parece tão estupidamente simples que ninguém respondeu. Tudo o que preciso fazer é adicionar um único valor em uma nova coluna ao final de cada linha. A coisa mais próxima que encontrei é usar sed -i "s/$/green/" ./test.txt , mas isso adiciona o valor green à próxima linha, preciso adicioná-la como uma nova coluna depois da coluna final atual

Eu tenho um arquivo como este:

chr -   xyz ordered_A01 5480    6144
chr -   xyz ordered_A01 5480    58001

Eu preciso que pareça assim:

chr -   xyz ordered_A01 5480    6144    green
chr -   xyz ordered_A01 5480    58001   green

Mas ao invés disso eu entendo isso:

chr -   xyz ordered_A01 5480    6144
green
chr -   xyz ordered_A01 5480    5801
green
    
por Jaysred 12.06.2014 / 08:17

3 respostas

7

O comando sed que você tem em sua pergunta está correto. Se você está vendo o resultado em uma nova linha, você tem seu terminal ajustado para estreitar e está apenas vendo quebra ou há código incluído em seu ambiente real que você não está nos mostrando neste exemplo. Funciona como está, mas há dois problemas com os quais você deve estar ciente:

  1. Usar $ como parte de sua expressão dentro de uma cadeia com aspas duplas é perigoso. Normalmente isso se expandiria como uma variável bash. Nesse caso, você se safou porque o caractere / depois dele não é um nome válido, mas para evitar isso você realmente deveria ter usado aspas simples em torno de sua expressão.

  2. Se você deseja alinhar as coisas como colunas, provavelmente deve incluir algum tipo de separador entre o final da linha e o valor que está adicionando. Uma guia pode ser a maneira mais simples de fazer isso, mas você provavelmente deve usar qualquer delimitador que já tenha entre outros campos.

Combinado, o comando fixo pode ser algo como isto:

sed -i 's/$/\tgreen/' ./test.txt

Se os resultados não estiverem alinhados do jeito que você deseja, você poderá pesquisar seus dados em col para alinhar as colunas.

No que diz respeito às coisas que você não está nos mostrando, o problema provavelmente está no seu arquivo de dados. Desde que você mencionou Wordpad e Excel em um comentário. Eu acho que você tem um ambiente misto Windows / Unix. Eu suspeito que o problema é que seu arquivo de dados tem sequências de não-impressão de lixo antes do final de suas linhas. Você deveria fazer algo para limpar isso. Um simples sed 's/\s*$//' pode ser um lugar para começar (faixas de todos os caracteres em branco no final da linha, exceto a nova linha final), mas um sistema mais avançado, como um conversor dos2unix, pode oferecer melhores resultados. Se você tem lixo binário e o arquivo deve ser texto ASCI, você pode tentar eliminar tudo com tr -cd '-6' .

    
por 12.06.2014 / 08:33
0

Você pode usar o Vim no modo Ex:

ex -sc '%s/$/\tgreen/|x' test.txt
  1. % seleciona todas as linhas

  2. \t tab

  3. x salvar e fechar

por 17.04.2016 / 05:24
-1

Você pode usar awk :

awk '{printf "%s", $0 "\tgreen\n"}' infile > outfile
    
por 12.06.2014 / 08:36