Как привязать команду к символу # в zathura

Задача 1:

Обрабатывать файлы, расположенные в /path, имя которых начинается с 201, за которым следует одна цифра между 2и 6, за которой следует любой символ.

Разбейте каждую строку на символ /и составьте строку с полями 5, 6, 7и 8, со знаком /между ними, за которым следует ",0,0,0". ] нить.

Сохраните эту строку и любые последующие строки в файле с именем файла, имя которого archives_201, за которым следует та же единственная цифра, которая была ранее во входном имени файла, с расширением .csv.

Решение 1:

awk -F/ '
    FNR==1 {match(FILENAME, /\/(201[2-6])/, m)}
    {print $5"/"$6"/"$7"/"$8",0,0,0" >> "archives_"m[1]".csv"}
' /path/201[2-6]*

Комментарии:

Поскольку вы не предоставляете образцы входных файлов и желаемый результат, мне пришлось гадать по нескольким пунктам.

Я понятия не имею, чего вы пытаетесь добиться с помощью:> ${8:0:4}"_export_0504.csv".

Конвейер findрезультатов в awkоставляет меня в недоумении :вы хотите, чтобы awkдействительно читал каждый файл или просто обрабатывал текстовый список? Если последнее, жесткая композиция полей ($5"/"$6"/"$7"/"$8)означает, что вы ожидаете, что все файлы будут в одном каталоге, так зачем вообще использовать find?

Я предположил, что нет никакой части пути, кроме имени файла, который начинается со строки поиска 201[2-6]. Я предположил, что вы хотите добавить(>>)несколько строк в один и тот же файл, а не перезаписывать его при необходимости(>). Я предположил, что все файлы находятся в одном каталоге, и я предположил, что awkдолжен работать с файлом содержимым , а не с именами файлов .

Однако выбор /в качестве разделителя полей намекает на последнюю гипотезу, поэтому я попытаюсь решить и эту проблему.


Задача 2:

Обрабатывать имена файлов, находящихся в /path, чье имя начинается с 201, за которым следует одна цифра между 2и 6, за которой следует любой символ.

Разделите каждое имя файла на символ /и составьте строку с 5-м, 6-м, 7-м,и 8-й компонент (, сохраняющий /между ними ), за которым следует строка ",0,0,0".

Сохраните эту строку и все последующие в файле с именем archives_201, за которым следует та же единственная цифра, которая была ранее в имени файла, с расширением .csv.

Решение 2:

awk -F/ '
    FNR==1 {
        match(FILENAME, /\/(201[2-6])/, m);
        $0=FILENAME;
        print $5"/"$6"/"$7"/"$8",0,0,0" >> "archives_"m[1]".csv"
    }
' /path/201[2-6]*
0
13.03.2020, 11:29
1 ответ

Простое экранирование с помощью обратной косой черты работает.

map \# focus_inputbar ":blist "
0
28.04.2021, 23:20

Теги

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