Comandos básicos#
echo#
[1]:
%%bash
#
# echo
#
echo hola mundo cruel!
hola mundo cruel!
[2]:
%%bash
#
# echo
#
echo "hola mundo cruel!"
hola mundo cruel!
[3]:
%%bash
#
# echo
#
echo "hola
mundo
cruel"
hola
mundo
cruel
[4]:
%%bash
#
# El caracter \ indica continuación y debe ser el último caracter de la línea
#
echo linea 1 \
linea 2 \
linea 3
linea 1 linea 2 linea 3
[5]:
%%bash
#
# Retorno de carro "\b"
#
echo -e "linea 1\nlinea 2\nlinea 3"
linea 1
linea 2
linea 3
prinf#
[6]:
%%bash
#
# Impresión con printf:
# * `%s` indica cadena de caracteres.
# * `%f` indica un número en punto flotante.
# * `%g` indica un número entero.
#
printf '%s ---- %f' 'hola mundo' 1.23456789
hola mundo ---- 1.234568
[7]:
%%bash
#
# Impresion con formato
#
printf '%15s --- %8.2f' hola 1.23456789
hola --- 1.23
[8]:
%%bash
#
# Impresion con formato
#
printf '%15s --- %8.2f' 'hola mundo' 123.456789
hola mundo --- 123.46
seq#
[9]:
%%bash
#
# seq se usa para imprimir secuencias de números.
#
seq 5
1
2
3
4
5
[10]:
%%bash
#
# String con formato.
#
seq -f"linea %g" 5
linea 1
linea 2
linea 3
linea 4
linea 5
[11]:
%%bash
#
# -s permite especificar el separador
# En este ejmplo el separador es la coma
#
seq -s, 2 2 10
2,4,6,8,10
[12]:
%%bash
#
# La opción `-w` permite especificar formato.
# Valor inicial, incremento y valor final
#
seq 0 .05 .1
0.00
0.05
0.10
[13]:
%%bash
seq -w 0 .05 .1
0.00
0.05
0.10
sort#
[14]:
%%bash
#
# Ordenamiento con sort
#
seq -f'linea %g' 3 > out.1
cat out.1 out.1 out.1 | sort
linea 1
linea 1
linea 1
linea 2
linea 2
linea 2
linea 3
linea 3
linea 3
uniq#
[15]:
%%bash
#
# Obtención de valores únicos con uniq
#
seq -f'linea %g' 3 > out.1 # genera el primer archivo de datos
seq -f'linea %g' 3 > out.2 # genera el segundo archivo de datos
cat out.1 out.2 out.1 out.2 | uniq
linea 1
linea 2
linea 3
linea 1
linea 2
linea 3
linea 1
linea 2
linea 3
linea 1
linea 2
linea 3
[16]:
%%bash
#
# Obtención de valores únicos con uniq
#
cat out.1 out.2 out.1 out.2 | sort | uniq
linea 1
linea 2
linea 3
wc#
[17]:
%%bash
#
# El comando `wc` permite contar líneas, palabras, caracteres y bytes
# de un archivo. La opción `-l` cuenta líneas, `-m` caracteres y `-w`
# palabras.
#
wc -l out.1 out.2 # número de líneas
3 out.1
3 out.2
6 total
[18]:
%%bash
#
# Número de caracteres
#
wc -m out.1 out.2
24 out.1
24 out.2
48 total
[19]:
%%bash
#
# Número de palabras
#
wc -w out.1 out.2
6 out.1
6 out.2
12 total
[20]:
%%bash
#
# Conteo de lineas, palabras y caracteres
#
wc out.1 out.2
3 6 24 out.1
3 6 24 out.2
6 12 48 total
grep#
[21]:
%%bash
#
# Números entre el 1 y el 20 que conienen el número 1
#
seq 20 | grep 1
1
10
11
12
13
14
15
16
17
18
19
[22]:
%%bash
#
# Lineas que conienen el número 1
#
seq -f'linea %g' 20 > out.1
grep 1 out.1
linea 1
linea 10
linea 11
linea 12
linea 13
linea 14
linea 15
linea 16
linea 17
linea 18
linea 19
[23]:
%%bash
#
# El símbolo `$` indica que la cadena de texto debe aparecer
# al final de la línea. El símbolo `^` indica que la cadena
# de texto debe aparecer al principio de la línea.
#
# Imprime los números del 1 al 100 que finalizan con 1.
#
seq 100 | grep 1$
1
11
21
31
41
51
61
71
81
91
[24]:
%%bash
#
# imprime los números del 1 al 100 que empiezan con 1.
#
seq 100 | grep ^1
1
10
11
12
13
14
15
16
17
18
19
100
[25]:
%%bash
#
# Cantidad de lineas entre el 1 y el 20 que contienen el número 1
#
seq 20 | grep 1 | wc -l
11
tr#
[26]:
%%bash
#
# Borra los caracteres '-'.
#
echo 'h-o-l-a- -m-u-n-d-o' > out.1
tr -d '-' < out.1
hola mundo
[27]:
%%bash
#
# Cambia el caracter '-' por '='.
#
echo 'h-o-l-a- -m-u-n-d-o' > out.1
tr '-' '=' < out.1 # '-' por '='.
h=o=l=a= =m=u=n=d=o
[28]:
%%bash
#
# Cambia las letras minúsculas por mayúsculas.
#
echo 'h-o-l-a- -m-u-n-d-o' > out.1
tr '[:lower:]' '[:upper:]' < out.1
H-O-L-A- -M-U-N-D-O
cut#
[29]:
%%bash
#
# Se genera un archivo de prueba y se extraen los caracteres
# de la posición 3 a la 5.
#
echo "123456790
abcdefghi
jklmnopqr" > out.1
cut -c3-5 out.1
345
cde
lmn
[30]:
%%bash
#
# Las columnas pueden indicarse por posición
#
cut -c3,4,5 out.1
345
cde
lmn
[31]:
%%bash
#
# Caracteres en las posiciones 2 y 5 a 7 de cada línea de un archivo.
#
cut -c2,5-7 out.1
2567
befg
knop
[32]:
%%bash
#
# cut permite manejar archivos delimitados
#
cat > out.1 <<EOF
FieldA, FieldD, FieldE
2, X, 2X
3, Y, 3Y
4, Z, 4Z
EOF
[33]:
%%bash
#
# archivo delimitado por comas del que se extrae la segunda columna
#
cut -d, -f2 out.1
FieldD
X
Y
Z
[34]:
%%bash
#
# Extrae las columnas 1 y 3
#
cut -d, -f1,3 out.1
FieldA, FieldE
2, 2X
3, 3Y
4, 4Z
[35]:
%%bash
#
# archivo de prueba
#
echo "Bash is a Unix shell and command language
written by Brian Fox for the
GNU Project as a free software
replacement for the Bourne shell." > out.1
cat out.1
Bash is a Unix shell and command language
written by Brian Fox for the
GNU Project as a free software
replacement for the Bourne shell.
[36]:
%%bash
#
# El delimitador es el espacio en blanco
#
cut -d' ' -f2 out.1
is
by
Project
for
colrm#
[37]:
%%bash
#
# Archivo de prueba
#
echo "123456790
abcdefghi
jklmnopqr" > out.1
#
# Se borran las columnas de la 3 a la 5
#
colrm 3 5 < out.1
126790
abfghi
jkopqr
[38]:
%%bash
#
# Si no se especifica la columna final se borran todas las columnas
#
colrm 3 < out.1
12
ab
jk
join#
[39]:
%%bash
cat > out.1 <<EOF
key, F1, F2
1, 11, 12
2, 21, 22
4, 41, 42
EOF
[40]:
%%bash
#
# La primera columna es la clave; los valores de los campos
# corresponden a la posición del elemento, es decir, el valor
# `13` corresponde al registro `1` y al campo `3`.
#
cat > out.2 <<EOF
key, F3, F4
1, 13, 14
2, 23, 24
3, 33, 34
EOF
[41]:
%%bash
#
# El comando `join` permite unir las líneas de ambos archivos
# usando el campo designado como clave. `join` no agrega el
# último registro de `out.1`, ya que no existe este registro
# en el archivo `out.2`.
#
# Agrega out.2 a out.1 usando como clave el primer campo (por defecto)
#
join -t, out.1 out.2
key, F1, F2, F3, F4
1, 11, 12, 13, 14
2, 21, 22, 23, 24
[42]:
%%bash
#
# Se puede especificar el campo de unión con las opciones `-1` para
# indicar el campo clave del primer archivo y `-2` para indicar el
# campo clave del segundo archivo.
join -1 1 -2 1 -t, out.2 out.1
key, F3, F4, F1, F2
1, 13, 14, 11, 12
2, 23, 24, 21, 22
[43]:
%%bash
#
# Adicionalmente, se pueden indicar los campos de salida con la
# opción `-o`. En el siguiente ejemplo, `1.2` representa el
# campo 2 del archivo 1.
#
join -t, -o1.2,2.3 out.1 out.2
F1, F4
11, 14
21, 24
[44]:
%%bash
join -t, -o'0,1.2,2.3' out.1 out.2
key, F1, F4
1, 11, 14
2, 21, 24
[45]:
%%bash
#
# El siguiente comando imprime los registros de `out.1` cuya
# clave no aparece en `out.2`:
#
# La opción `-v` se usa para que `join` imprima los registros
# que solo aparecen en uno solo de los archivos.
#
join -t, -v 1 out.1 out.2
4, 41, 42
[46]:
%%bash
#
# De forma equivalente, los registros de `out.2`
# que no están en `out.1` se obtienen con:
#
join -t, -v 2 out.1 out.2
3, 33, 34
[47]:
%%bash
#
# Los registros que no están en ambos archivos se obtienen con:
#
join -t, -v 1 -v 2 out.1 out.2
3, 33, 34
4, 41, 42
[48]:
%%bash
#
# Para que en la combinación se incluyan los registros sin
# clave en alguno de los archivo se usa la opción `-a`. Por
# ejemplo:
#
join -a 1 -t, out.1 out.2
key, F1, F2, F3, F4
1, 11, 12, 13, 14
2, 21, 22, 23, 24
4, 41, 42
[49]:
%%bash
join -a 2 -t, out.1 out.2
key, F1, F2, F3, F4
1, 11, 12, 13, 14
2, 21, 22, 23, 24
3, 33, 34
[50]:
%%bash
#
# La opción `-e` se usa para indicar la cadena de texto que se
# agrega a los campos de los registros para los cuales no hay valores.
#
join -a 1 -a 2 -e NA -t, out.1 out.2
key, F1, F2, F3, F4
1, 11, 12, 13, 14
2, 21, 22, 23, 24
3, 33, 34
4, 41, 42
paste#
[51]:
%%bash
#
# El comando `paste` permite pegar un archivo con otro,
# uniendo la primera linea de ambos archivos, luego la
# segunda y así sucesivamente.
#
seq -f'linea %g' 5 > out.1; cat out.1
linea 1
linea 2
linea 3
linea 4
linea 5
[52]:
%%bash
seq -f'linea %g' 6 1 10 > out.2; cat out.2
linea 6
linea 7
linea 8
linea 9
linea 10
[53]:
%%bash
paste -d'-' out.1 out.2
linea 1-linea 6
linea 2-linea 7
linea 3-linea 8
linea 4-linea 9
linea 5-linea 10