файл cat в цикле for с сохранением формата данных в 1 строке один раз в цикле

En bash, esa es una buena manera de hacerlo, sí.

Obtener el script de "biblioteca" usando sourceo .sería una solución adecuada a su problema de querer compartir una definición de función entre dos o más scripts. Cada secuencia de comandos que necesitaba acceso a la función (s )definida en la secuencia de comandos de "biblioteca" (s )generaría el archivo necesario (s ), probablemente en la parte superior de la secuencia de comandos.

Esto le permitiría recopilar funciones relacionadas en un solo script de "biblioteca" y obtener acceso a ellas.

No del todo relacionado, pero el shell bashtambién tiene la capacidad de generar automáticamente un archivo al ejecutar un shell no -interactivo (, es decir, un script ). Esto puede usarse para configurar un entorno específico para el script:

BASH_ENV="$HOME/stuff/script.env"./myscript

... donde script.envpuede hacer cualquier cosa, desde definir funciones y establecer variables de entorno o shell, hasta obtener otros archivos, etc.


Algunos shells, como ksh93, tienen una variable de entorno que apunta a un directorio que puede contener scripts de definición de funciones como estos. En ksh93, esta variable se llama FPATH. Un script, $FPATH/foo, contendría una función llamada foo,que se encontraría automáticamente cuando el usuario escriba fooen la línea de comando (o en un script ). Que yo sepa, el shell bashno tiene esta funcionalidad específica.

Otros shells tienen otras formas de funcionalidad de "carga automática -".

0
19.07.2019, 13:16
2 ответа

По умолчанию циклfor-зацикливается на словах, а не на строках!

Обычно в цикле нет необходимости, и вы просто используете awk, так как он именно это и делает, перебирая строки файла:

awk '{print $1,$2 ;}' indexes.out

Если вы хотите продолжить работу с данными в оболочке, вы можете использовать цикл whileиread:

while read a b; do echo "$a $b"; done < indexes.out

Для других целей вам следует обратиться к этому связанному вопросу .

0
28.01.2020, 05:06

Я нашел обходной путь, который мне подойдет:

Вместо пробела в файле используйте вертикальную черту-разделитель (| )как показано ниже:

informix|abc_aseld_idx1
informix|abc_aseld_idx2
informix|abc_aseld_idx3
informix|abc_aseld_idx4
informix|abc_aseld_idx5

В цикле вы можете заменить трубу интервалом, как показано ниже:

for i in `cat indexes.out`
do
echo "$i" | sed 's/|/ /g
done 

вывод:

informix abc_aseld_idx1
informix abc_aseld_idx2
informix abc_aseld_idx3
informix abc_aseld_idx4
informix abc_aseld_idx5
-2
28.01.2020, 05:06

Теги

Похожие вопросы