uso que otro mayor else ejemplos dentro condicion ciclo anidados anidado bash string-split

que - Cómo dividir una cadena en bash delimitado por pestaña



if mayor que bash (5)

Estoy tratando de dividir un campo delimitado de pestaña en bash.

Soy consciente de esta respuesta: cómo dividir una cadena en shell y obtener el último campo

Pero eso no responde por un carácter de tabulador.

Quiero hacer obtener la parte de una cadena antes del carácter de tabulación, así que estoy haciendo esto:

x=`head -1 my-file.txt` echo ${x%/t*}

Pero / t coincide en la letra ''t'' y no en una pestaña. ¿Cuál es la mejor manera de hacer esto?

Gracias


Si su archivo se ve algo como esto (con pestaña como separador):

1st-field 2nd-field

puede usar cut para extraer el primer campo (opera en la pestaña por defecto):

$ cut -f1 input 1st-field

Si está usando awk , no es necesario usar tail para obtener la última línea, cambiando la entrada a:

1:1st-field 2nd-field 2:1st-field 2nd-field 3:1st-field 2nd-field 4:1st-field 2nd-field 5:1st-field 2nd-field 6:1st-field 2nd-field 7:1st-field 2nd-field 8:1st-field 2nd-field 9:1st-field 2nd-field 10:1st-field 2nd-field

Solución utilizando awk:

$ awk ''END {print $1}'' input 10:1st-field

Solución pura de bash:

#!/bin/bash while read a b;do last=$a; done < input echo $last

salidas:

$ ./tab.sh 10:1st-field

Por último, una solución utilizando sed

$ sed ''$s//(^[^/t]*/).*$//1/'' input 10:1st-field

aquí, $ es el operador de rango; es decir, operar en la última línea solamente.

Para su pregunta original, use una pestaña literal, es decir

x="1st-field 2nd-field" echo ${x% *}

salidas:

1st-field


Use $''ANSI-C'' cadenas en la expansión del parámetro:

$ x=$''abc/tdef/tghi'' $ echo "$s" abc def ghi $ echo ">>${x%%$''/t''*}<<" >>abc<<


Utilice awk.

echo $yourfield | awk ''{print $1}''

o, en su caso, para el primer campo de la última línea de un archivo

tail yourfile | awk ''{x=$1}END{print x}''


x=first$''/t''second echo "${x%$''/t''*}"

Ver CITA en man bash


read field1 field2 <<< ${tabDelimitedField}

o

read field1 field2 <<< $(command_producing_tab_delimited_output)