Shell Script para realizar operaciones en un archivo

La mayoría de las veces, usamos secuencias de comandos de shell para interactuar con los archivos. Shell scripting ofrece algunos operadores, así como algunos comandos para verificar y realizar diferentes propiedades y funcionalidades asociadas con el archivo.

Para nuestra comodidad, creamos un archivo llamado ‘geeks.txt’ y otro archivo .sh (o simplemente lo ejecutamos en la línea de comando) para ejecutar diferentes funciones u operaciones en ese archivo. Las operaciones pueden ser leer el contenido del archivo o probar el tipo de archivo. Estos se discuten a continuación con ejemplos adecuados:

Funcionalidades de lectura de archivos

La lectura de archivos es una tarea interesante en la vida de un programador. Shell scripting ofrece algunas funcionalidades para leer el archivo, invertir los contenidos, contar palabras, líneas, etc.

  • Lectura línea por línea: Primero, tomamos la entrada usando el comando de lectura y luego ejecutamos el bucle while que se ejecuta línea tras línea.

Guion:

#!/bin/bash
read -p "Enter file name : " filename
while read line
do 
echo $line
done < $filename

  • Contar caracteres, palabras y líneas en el archivo: Tomamos tres variables, una para contar caracteres, palabras y líneas respectivamente. Usamos el comando ‘wc’ , que significa conteo de palabras y también cuenta la cantidad de caracteres y palabras. Para contar líneas, pasamos ‘ grep ‘ que lleva la cuenta de las líneas que coinciden con un patrón. Luego imprimimos cada variable.

 Guion:

#! /bin/bash

echo Enter the filename
read file
c=`cat $file | wc -c`
w=`cat $file | wc -w`
l=`grep -c "." $file`
echo Number of characters in $file is $c
echo Number of words in $file is $w
echo Number of lines in $file is $l

  • Mostrar el contenido del archivo al revés: para imprimir el contenido de cualquier archivo al revés, usamos los comandos tac o nl, sort, cut. Tac es simplemente el reverso de un gato y simplemente imprime el archivo en orden inverso. Mientras que nl ordena números, el contenido del archivo ordena el archivo numerado en orden inverso, y el comando cut elimina el número e imprime el contenido del archivo.

 Guion:

$ nl geeks.txt | sort -nr | cut -f 2-

  • Frecuencia de una palabra en particular en el archivo: Para contar la frecuencia de cada palabra en un archivo, usamos ciertos comandos. Estos son xargs que aplican la impresión a cada línea en la salida, el tipo que ordena, el búfer actual conectado a él, uniq -c muestra los recuentos de cada línea en el búfer y, por último, awk, imprime la segunda columna y luego la primera columna basado en el requisito del problema.

      Guion:

gato frikis.txt | xargs printf “%s\n” | ordenar | uniq-c | ordenar -nr | awk ‘{imprimir $2,$1}’

Operadores de prueba de archivos

  • -b archivo: este operador verifica si el archivo es un archivo especial de bloque o no y devuelve verdadero o falso posteriormente. Es [-b $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -b $file_name ]
then
   echo "$file_name is a block special file"
else
   echo "$file_name is not a block special file"
fi

Producción:

  • -d archivo: el operador revisa si el archivo está presente como un directorio. Si es Sí, devuelve verdadero, de lo contrario, falso. Es [-d $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -d $file_name ]
then
   echo "$file_name is a directory"
else
   echo "$file_name is not a directory"
fi

Producción:

  • -e archivo: El operador inspecciona si el archivo existe o no. Incluso si se pasa un directorio, devuelve verdadero si el directorio existe. Es [-e $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -e $file_name ]
then
   echo "$file_name exist"
else
   echo "$file_name not exist"
fi

Producción:

  • -f archivo: si el archivo es un archivo ordinario o un archivo especial, devuelve verdadero; de lo contrario, es falso. Es [-f $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -f $file_name ]
then
   echo "$file_name is file"
else
   echo "$file_name is not file"
fi

Producción:

  • -r archivo: Esto comprueba si el archivo es legible. Si encuentra que sí, devuelva verdadero, de lo contrario, falso. Es [-r $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -r $file_name ]
then
   echo "$file_name is readable"
else
   echo "$file_name is not readable"
fi

Producción:

  • -s archivo: Este operador verifica si el archivo tiene un tamaño mayor a cero o no, lo que devuelve verdadero o falso posteriormente. Es [-s $archivo] sintácticamente.

Guion:

 #! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -s $file_name ]
then
   echo "$file_name has size>0"
else
   echo "$file_name has size= 0"
fi

Producción:

  • -w archivo:  si se permite retorcer el archivo, entonces el operador devuelve verdadero, y si no, falso. Es [-w $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -w $file_name ]
then
   echo "$file_name is writable"
else
   echo "$file_name is not writable"
fi   

Producción: 

  • -x archivo: el operador revisa si el archivo es ejecutable o no, y devuelve verdadero y falso posteriormente. Es [-x $archivo] sintácticamente.

Guion:

#! /bin/bash
echo -e "Enter the name of the file : \c"
read file_name

if [ -x $file_name ]
then
   echo "$file_name is executable"
else
   echo "$file_name is not executable"
fi   

Producción:

Renombrar y eliminar archivo: para cambiar el nombre del archivo, usamos el comando ‘mv’ que cambia el nombre del archivo y ‘rm’ para eliminar el archivo.

Como podemos ver debajo de la línea de comando, rompiendo el archivo Bad (después de renombrarlo) y eliminándolo con el comando ‘rm’, ya no está allí.

Publicación traducida automáticamente

Artículo escrito por barnadipdey2510 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *