вторник, 3 августа 2010 г.

Bash. Построчное чтение файла и разбивка строк с использованием делимитера

В посте постараюсь описать алгоритм построчного чтения текстового файла и разбиение его строк на части.

Допустим мы имеем текстовый файл такой структуры:

...
username1;password1
username2;password2
username3;password3
...

Пример просто для наглядности, пароли хранить так не безопасно.

#!/bin/bash

while read line ; do
  IFS=";"
  set -- $line
  username=$1
  password=$2
  echo -e "$username->$password\n"
done < filename.csv


Рассмотрим детальнее:
- цикл читает файл построчно, сохраняя текущую строку в переменной line
- IFS=";" выставляем делимитер разбивки (в нашем случае ";")
- set -- $line - разбиваем строку, после чего каждая ее часть будет доступна как $1, $2, ...

8 комментариев:

  1. я в качестве скриптового языка в системе на питон перешёл, намного имхо лаконичней и понятней чем баш:
    ----------------------------------
    strings = open('bla').readlines()
    for s in strings:
    login, passwd = s.string(';')
    print login+'->'+passwd
    ----------------------------------
    разве не прелесть :)

    ОтветитьУдалить
  2. понятно что Питон читабельнее :) Даже не спорю. Просто у меня была задача именно на баше написать подобный скрипт

    ОтветитьУдалить
  3. как разделить, например, файл (31872 строки) построчно по, например, 300 строк

    ОтветитьУдалить
  4. как разделить, например, файл (31872 строки) построчно по, например, 300 строк

    ОтветитьУдалить
  5. Очень помог Ваш пример, все понятно. Спасибо.

    ОтветитьУдалить
  6. >как разделить, например, файл (31872 строки) построчно по, например, 300 строк

    split -l 300

    ОтветитьУдалить
  7. очень помогло, спасибо огромное!

    ОтветитьУдалить