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

Я пытаюсь написать сценарий оболочки 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" 

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

  • Сортировка файла на основе средней части
  • Как выполнить сценарий оболочки при запуске Kali Linux?
  • Почему значение IFS удаляется из файла при расщеплении?
  • как получить или отразить имя вызываемой функции bash?
  • Нужно получить командную строку всех запущенных демонов
  • распечатать файл в шестнадцатеричном формате с помощью awk
  • Самораспаковывающиеся скрипты: tar -xO и dd
  • Как ретроактивно создавать скрипт с правами root?
  • 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 поля ввода. Каждый элемент массива будет иметь два поля (первый, последний). Вторая строка будет проходить через каждый элемент массива и подставлять каждое поле в соответствии с требованием и выводить новый каталог из каждой новой сформированной записи.

    Interesting Posts

    Менеджер Synaptic и менеджер программного обеспечения не открываются

    Как включить горизонтальную полосу прокрутки в GNU Emacs для linux ubuntu?

    Приоритет пользователя и владельца группы в разрешении файлов

    есть ли инструмент / демон, который автоматически заполняет / etc / ethers в фоновом режиме, чтобы иметь надлежащий wake on lan hostname: Mac-база данных при необходимости?

    Bluetooth работает только в очень небольшом диапазоне

    Как читать страницу руководства для встроенного bash?

    Замена команд – одинарные кавычки и пробелы

    Связывание двух широкополосных соединений для обслуживания LAN в качестве шлюза

    Форматирование и отображение интервала с дробными секундами в оболочке

    Как повторить последовательность чисел в столбце с помощью команды awk

    Автоматическое обнаружение новых файлов и их загрузка

    Минимизировать задержку игрового сервера с помощью iptables

    как читать и изменять fstab в python?

    Когда dd подходит для копирования данных? (или, когда read () и write () частично)

    Каков рекомендуемый способ установки стандартного планировщика ввода-вывода в Linux?

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