tengo entrada.txtcáscara reemplazar cr lf por coma
1
2
3
4
5
que necesito para obtener tales salida.txt
1,2,3,4,5
¿Cómo hacerlo?
tengo entrada.txtcáscara reemplazar cr lf por coma
1
2
3
4
5
que necesito para obtener tales salida.txt
1,2,3,4,5
¿Cómo hacerlo?
Prueba esto:
tr '\n' ',' <input.txt> output.txt
Esto trata de las nuevas líneas; ¿y el carruaje regresa? Es posible que no haya nada que hacer si el usuario está en DOS y es un archivo de texto: las rutinas de entrada convierten CRLF en '\ n'. Más en serio, tal vez, el código reemplaza la línea nueva final (CRLF) con una coma. –
Esta solución deja una coma al final: –
solo como respuesta a la pregunta de Jonathon, tuve que reemplazar ''\ n'' con'' \ r'' para el retorno de carro. – TravisF
Con sed
, se puede utilizar:
sed -e 'H;${x;s/\n/,/g;s/^,//;p;};d'
El H
anexa el espacio de patrones al espacio de espera (ahorro de la línea actual en el espacio de la bodega). El ${...}
rodea las acciones que se aplican solo a la última línea. Esas acciones son: x
swap hold y pattern space; s/\n/,/g
sustituir nuevas líneas incrustadas con comas; s/^,//
eliminar la coma inicial (hay una línea nueva al comienzo del espacio de espera); y p
imprimir. El d
borra el espacio del patrón - sin impresión.
También es posible usar, por lo tanto:
sed -n -e 'H;${x;s/\n/,/g;s/^,//;p;}'
El -n
suprime la impresión por defecto para la final d
ya no se necesita.
Esta solución asume que las terminaciones de línea CRLF son la terminación de línea nativa local (por lo que está trabajando en DOS) y que sed
generará la línea nativa local que termina en la operación de impresión. Si tiene una entrada en formato DOS pero quiere un formato Unix (solo LF), entonces tiene que trabajar un poco más, pero también debe estipular esto explícitamente en la pregunta.
Me funcionó bien en MacOS X 10.6.5 con los números 1..5 y 1..50 y 1..5000 (23.893 caracteres en la línea de salida); No estoy seguro de que quiera presionarlo más.
Otra forma: 'sed -n ': a; N; $ {s/\ n /,/g; p}; ba'' (sin tener que deshacerse de una coma inicial). –
En respuesta a @ comentario de Jonathan a la respuesta de @ eumiro:
tr -s '\r\n' ',' < input.txt | sed -e 's/,$/\n/' > output.txt
tr
y sed
utilizado muy bien, pero cuando se trata de presentar el análisis y la expresión regular que no puede vencer Perl (No sé por qué la gente piensa que sed y tr están más cerca de la cáscara que perl ...)
perl -pe 's/\n/$1,/' your_file
si quieres cáscara pura hacerlo continuación, busque en cadena que coincide con versiones
${string/#substring/replacement}
awk '{printf("%s,",$0)}' input.txt
awk 'BEGIN{ORS=","} {print $0}' input.txt
1,2,3,4,5,
Has solicitado que 1,2,3,4,5
, en comparación con 1,2,3,4,5,
(tenga en cuenta la coma después de las 5, la mayoría de las soluciones anteriores también incluyen la coma final), aquí hay dos versiones más con Awk (con wc
y sed
) para deshacerse de la última coma:
i='input.txt'; awk -v c=$(wc -l $i | cut -d' ' -f1) '{printf("%s",$0);if(NR<c){printf(",")}}' $i
awk '{printf("%s,",$0)}' input.txt | sed 's/,\s*$//'
cat input.txt | sed -e 's|$|,|' | xargs -i echo "{}"
comando Uso pasta. Aquí está el uso de tuberías:
echo "1\n2\n3\n4\n5" | paste -s -d, /dev/stdin
aquí es el uso de un archivo:
echo "1\n2\n3\n4\n5" > /tmp/input.txt
paste -s -d, /tmp/input.txt
por las páginas de manual del s concatena todas las líneas y D permite definir el carácter delimitador.
¿Qué final de línea debe tener la salida? Usted menciona CR \ LF en la pregunta - ¿Quiere decir que tiene un archivo de texto DOS? Y la salida debe ser un archivo de texto de DOS (por lo que necesita un CRLF final)? –