
He buscado aquí y en algunos otros lugares para intentar encontrar una respuesta a esto, pero parece tan estúpidamente simple que nadie ha respondido. Todo lo que necesito hacer es agregar un valor único en una nueva columna al final de cada línea. Lo más parecido que he encontrado es usar, sed -i "s/$/green/" ./test.txt
pero esto agrega el valor verde a la siguiente línea. Necesito que se agregue como una nueva columna después de la columna final actual.
Tengo un archivo como este:
chr - xyz ordered_A01 5480 6144
chr - xyz ordered_A01 5480 58001
Necesito que se vea así:
chr - xyz ordered_A01 5480 6144 green
chr - xyz ordered_A01 5480 58001 green
Pero en lugar de eso me sale esto:
chr - xyz ordered_A01 5480 6144
green
chr - xyz ordered_A01 5480 5801
green
Respuesta1
El comando sed que tienes en tu pregunta es realmente correcto. Si ve el resultado en una nueva línea, o tiene su terminal configurado en estrecho y solo está viendo un ajuste o hay un código incluido en su entorno real que no nos muestra en este ejemplo. Funciona tal como está, pero hay dos problemas que debes tener en cuenta:
Usarlo
$
como parte de su expresión dentro de una cadena entre comillas dobles es peligroso. Normalmente eso se expandiría como una variable bash. En este caso te saliste con la tuya porque el/
carácter que sigue no es un nombre valioso válido, pero para evitar esto deberías haber usado comillas simples alrededor de tu expresión.Si desea alinear cosas como columnas, probablemente debería incluir algún tipo de separador entre el final de la línea y el valor que está agregando. Una pestaña podría ser la forma más sencilla de hacer esto, pero probablemente deberías usar cualquier delimitador que ya tengas entre otros campos.
Combinado, el comando fijo podría verse así:
sed -i 's/$/\tgreen/' ./test.txt
Si los resultados no se alinean como usted desea, puede considerar canalizar sus datos col
para alinear las columnas.
En cuanto a las cosas que no nos muestra, el problema probablemente esté en su archivo de datos. Ya que mencionas Wordpad y Excel en un comentario. Supongo que tienes un entorno mixto Windows/Unix. Sospecho que el problema es que su archivo de datos tiene secuencias basura que no se imprimen antes del final de sus líneas. Deberías hacer algo para limpiar eso. Un sistema simple sed 's/\s*$//'
podría ser un lugar para comenzar (tiras de todos los caracteres de espacio en blanco al final de la línea, excepto la nueva línea final), pero un sistema más avanzado como un convertidor dos2unix podría brindarle mejores resultados. Si tiene basura binaria y se supone que el archivo es texto ASCI, puede intentar eliminar todo lo que esté fuera de rango con tr -cd '\11\12\15\40-\176'
.
Respuesta2
Podrías usar awk
:
awk '{printf "%s", $0 "\tgreen\n"}' infile > outfile
Respuesta3
Puedes usar Vim en modo Ex:
ex -sc '%s/$/\tgreen/|x' test.txt
%
seleccionar todas las líneas\t
pestañax
guardar y cerrar