script reemplazar manejo linea leer insertar fichero examples comando cadenas sed awk field cut text-parsing

reemplazar - sed linux



¿Debo usar cut o awk para extraer campos y subcadenas de campo? (4)

Tengo un archivo con campos separados por tubería. Quiero imprimir un subconjunto del campo 1 y todo el campo 2:

cat tmpfile.txt

# 10 chars.|variable length num|text ABCDEFGHIJ|99|U|HOMEWORK JIDVESDFXW|8|C|CHORES DDFEXFEWEW|73|B|AFTER-HOURS

Me gustaría que el resultado fuera así:

# 6 chars.|variable length num ABCDEF|99 JIDVES|8 DDFEXF|73

Sé cómo obtener los campos 1 y 2:

cat tmpfile.txt | awk ''{FS="|"} {print $1"|"$2}''

Y sepa cómo obtener los primeros 6 caracteres del campo 1:

cat tmpfile.txt | cut -c 1-6

Sé que esto es bastante simple, pero no puedo entender cómo combinar los comandos awk y cut .

Cualquier sugerencia sería muy apreciada.


Me gusta una combinación de corte y sed, pero eso es solo una preferencia:

cut -f1-2 -d"|" tmpfile.txt|sed ''s//([A-Z]/{6/}/)[A-Z]/{4/}//1/g''

Resultado:

# 10-digits|variable length num ABCDEF|99 JIDVES|8 DDFEXF|73

Editar: (Se quitó el gato inútil) ¡Gracias!


Podrías usar awk . Use la función substr() para recortar el primer campo:

awk -F''|'' ''{print substr($1,1,6),$2}'' OFS=''|'' inputfile

Para su entrada, produciría:

ABCDEF|99 JIDVES|8 DDFEXF|73

Usando sed , podrías decir:

sed -r ''s/^(.{6})[^|]*([|][^|]*).*//1/2/'' inputfile

para producir el mismo resultado


Solo para otra variación: awk -F/| -vOFS=/| ''{print $1,$2}'' t.in | cut -c 1-6,11- awk -F/| -vOFS=/| ''{print $1,$2}'' t.in | cut -c 1-6,11-

Además, como señala tripleee, dos cortes también pueden hacer esto: cut -c 1-6,11- t.in | cut -d/| -f 1,2 cut -c 1-6,11- t.in | cut -d/| -f 1,2


Podría usar cortar y pegar, pero luego debe leer el archivo dos veces, lo cual es un gran problema si el archivo es muy grande:

paste -d ''|'' <(cut -c 1-6 tmpfile.txt ) <(cut -d ''|'' -f2 tmpfile.txt )