awk: печатать несколько файлов, каждый файл в новую папку. Имя папки, извлеченное из входного файла - PullRequest
0 голосов
/ 20 апреля 2020

Я пытаюсь добавить mkdir в строку awk.

input.txt:

A1 B1
A2 B2
A3 B3

Цель: напечатать каждую строку в новый файл. Каждый новый файл должен иметь то же имя, например, «file.txt». Каждый новый файл должен быть напечатан в своей новой папке. Имя папки должно быть взято из первого поля соответствующей строки во входном файле. Результирующая структура папок:

home
|__input.txt
|
|__A1
|  |__file.txt
|
|__A2
|  |__file.txt
|
|__A3
|  |__file.txt

Мой awk для создания файлов с именами файлов из ввода:

$ awk '{F = $1".txt"} {print > F}' input.txt

Мой awk для создания папок с именами папок из ввода:

$ awk '{print "mkdir "$1}' input.txt | sh

Но как объединить их и создать папки с именами папок из входных данных, но сохранить то же имя файла 'file.txt'?

1 Ответ

0 голосов
/ 20 апреля 2020

Вы на самом деле не "добавляете mkdir в строку awk". Вы передаете вывод awk в оболочку. Я думаю, что это лучше сделать с помощью одного сценария оболочки (вам все равно понадобится оболочка для вызова mkdir):

input=input.txt
newfile=file.txt
while IFS= read -r line; do
    first="${line% *}"                #This means "the line up to first space"
    mkdir "$first"
    echo "$line" > "$first/$newfile"
done < "$input"
...