Создать каталог для каждой строки в данном текстовом файле?

Я пытаюсь написать сценарий оболочки bash, который будет считывать данные из данного файла (как аргумента), а для каждой строки в файле – подкаталог в указанном каталоге (в качестве аргумента).

Сценарий называется studentDir а входной файл называется studentInfo.txt .
Вот две строки:

 Sara Smith Freshman Marketing James Lucas Junior Engineering 

В командной строке пользователь должен написать имя сценария, имя файла txt и каталог, в котором должны храниться новые каталоги. Я думаю, это будет так:

 $ studentDir studentInfo.txt . 

Что создаст подкаталоги в текущем каталоге.

Каталоги следует называть LLLLFF .
Например:

 SmitSa LucaJa 

(Другая информация из входного файла не требуется)

Я думаю, чтобы получить имена, которые я бы использовал:

 DIRNAME=$(cut -d' ' -f2 | cut -c1-4 ; cut -d' ' -f1 | cut -c1-2) mkdir "$DIRNAME" 

Но я не уверен, какая команда создавала бы каталог для каждой строки и как я мог бы сделать это рекурсивно для каждого из них.

  • Сценарий оболочки для увеличения количества записей
  • Как безопасно передавать переменные в сценарии с поддержкой root?
  • Преобразование списка с разделителями строк с пробелами в аргументы
  • Скопируйте имена файлов и добавьте префикс пути в каталог, рекурсивный
  • Сортировка файлов css по свойству цвета
  • Как указать -? с GNU getopt
  • Домашний путь пользователей в сценарии bash
  • Установка XDG_DATA_HOME и XDG_CONFIG_HOME для компиляции / для каждой программы
  • 3 Solutions collect form web for “Создать каталог для каждой строки в данном текстовом файле?”

    Решение awk

     awk '{print substr($2,1,4) substr($1,1,2)}' file 

    дает вам имена каталогов.

     mkdir $(awk '{print substr($2,1,4) substr($1,1,2)}' file) 

    создает каталоги (если их не так много). Для огромных чисел (10 000+) вы можете использовать:

     awk '{print substr($2,1,4) substr($1,1,2)}' file | xargs --delimiter=\\n mkdir 

    решение bash

    awk не требуется, оболочка может сделать это сама:

     while read first last rest; do mkdir -p "${last:0:4}${first:0:2}"; done <file 

    Вы можете использовать perl . Высказывание:

     perl -lanE 'mkdir substr(@F[1],0,4) . substr(@F[0],0,2)' studentInfo.txt 

    создаст нужные каталоги.

    Попробуй это:

     arr=($(cut -d ' ' -f1,2 < $*)) mkdir $(for ((i=0;i<${#arr[@]};i=i+2)); do echo ${arr[$i+1]:0:4}${arr[$i]:0:2}; done) 

    Первая строка создаст массив, содержащий только первые 2 поля ввода. Каждый элемент массива будет иметь два поля (первый, последний). Вторая строка будет проходить через каждый элемент массива и подставлять каждое поле в соответствии с требованием и выводить новый каталог из каждой новой сформированной записи.

    Linux и Unix - лучшая ОС в мире.