Anexar uma coluna

Anexar uma coluna

Pesquisei aqui e em 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 foi usar, sed -i "s/$/green/" ./test.txtmas isso adiciona o valor verde à próxima linha, preciso adicioná-lo como uma nova coluna após a coluna final atual

Eu tenho um arquivo como este:

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

Eu preciso que fique assim:

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

Mas em vez disso eu entendo isso:

chr -   xyz ordered_A01 5480    6144
green
chr -   xyz ordered_A01 5480    5801
green

Responder1

O comando sed que você tem na sua pergunta está realmente correto. Se você estiver vendo o resultado em uma nova linha, seu terminal está definido como estreito e está apenas vendo o wrap ou há um código incluído em seu ambiente real que você não está nos mostrando neste exemplo. Funciona como está, mas há dois problemas dos quais você deve estar ciente:

  1. Usar $como parte de sua expressão dentro de uma string entre 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 e valioso, mas para evitar isso, você realmente deveria ter usado aspas simples em sua expressão.

  2. Se você deseja alinhar coisas como colunas, provavelmente deverá 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 parecido com isto:

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

Se os resultados não estiverem alinhados da maneira desejada, você pode tentar canalizar seus dados colpara 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. Já que você mencionou Wordpad e Excel em um comentário. Eu acho que você tem um ambiente misto Windows/Unix. Suspeito que o problema é que seu arquivo de dados contém sequências de lixo não imprimíveis 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 (tiras de todos os caracteres de espaço em branco no final da linha, exceto a nova linha final), mas um sistema mais avançado, como um conversor dos2unix, pode fornecer melhores resultados. Se você tiver lixo binário lá e o arquivo for supostamente um texto ASCI, você pode tentar destruir tudo fora do intervalo com tr -cd '\11\12\15\40-\176'.

Responder2

Você poderia usar awk:

awk '{printf "%s", $0 "\tgreen\n"}' infile > outfile

Responder3

Você pode usar o Vim no modo Ex:

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

  2. \taba

  3. xsalvar e fechar

informação relacionada