Пакетная обработка большого количества файлов [закрыто]

awkрешение:

awk 'NR<=2{ print }NR>2{ c=0; r=$1; 
            for(i=2;i<=NF;i++) { 
               if ((length(r) + length($i)) > (!c? 65:61)) { c++; printf "%s\n\t",r; r=$i } 
               else { r=r FS $i } if(i==NF) printf "%s",r } 
            print "" 
     }' file
  • NR<=2{ print }- вывести первые 2 строки как есть

  • rпеременная, содержащая каждую обработанную/ форматированная строка


Вывод:

Depth   Description
(ft)    -
12370.0 LS: Mdst, blsh gry, sft, occ mod firm, crpxln, prly, arg,
    SLTST: blk, firm-mod hd, amor, gt, mod calc, CLST: lt gry-m
    gry, sft, amor, wxy
12400.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
    blk-dk gry, firm-mod hd, amor, gt, mod calc, CLST: lt gry-m
    gry, occ rdsh gry, mod firm, amor, wxy, tr CHK
12430.0 LS: Mdst, blsh gry, mod firm, crpxln, chky, arg, SLTST:
    blk-dk gry, firm-mod hd, amor, gt, mod calc, SH: blk-dk gry,
    mod firm, blky-plty, occ brit, wxy
12460.0 SH: blk-dk gry, mod firm, blky-plty, occ brit, ea, SLTST:
    blk-dk gry, firm-mod hd, amor, gt, mod calc, SST: gry-dk gry,
    wl consol, v f, ang, p srt, cotd, slily calc cmt, no fluor
0
28.08.2017, 09:34
2 ответа

Следующий сценарий просматривает все файлы в каталоге, в котором выполняется сценарий, и применяет к ним команды одну за другой. Это то, что вы хотите?

#! /bin/sh
for file in *
do
   if [[ -f "$file"  ]]; then
      # process the file with name in "$file" here
   fi
done

Вы можете выполнить переименование файла в соответствии с запросом, используя следующий оператор внутри вышеуказанного цикла:

mv "$file"  "$(echo" $file" | sed -n "s|^\(.*\)\(\.[0-9a-zA-Z]*\)$|\1_su\2|p")"

Он помещает суффикс "_su" перед суффиксом расширения файла, но в конце имени файла. Если файлы не имеют расширения, то в конце имени файла ставится суффикс.

2
28.01.2020, 02:33
  1. Собрать команды в скрипт (см. ниже)
  2. Добавить суффикс к имени файла, указанному в командной строке скрипта, и использовать его в качестве выходного имени файла.
#!/bin/sh

for name in "$@"; do
    some_utility "$name" >"$name.suffix"
done

"$@"расширится до списка в кавычках, который у вас есть в командной строке. Например, с

$ ./script.sh a b "hello world" 123

переменная $nameполучит значения a, b, hello worldи 123. при последовательных итерациях цикла. Вы должны передать свои входные файлы таким образом или как

$ ./script.sh input*.txt

, что даст ему все файлы, соответствующие заданному шаблону в текущем каталоге.

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

Замените строку внутри цикла чем-то, что выполняет фактическую обработку файла $name.

Сценарий должен быть выполнен исполняемым, чтобы его можно было запускать с помощью ./script.sh. Вы делаете это с помощью chmod +x script.sh.

1
28.01.2020, 02:33

Теги

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