как разделить файл и строки

В ударе нет простой остроты, но существует один в zsh. Добавьте строку autoload -U zmv к Вашему ~/.zshrc. Затем можно использовать zmv и подстановочные знаки zsh и замена параметра.

zmv '/path/to/starting/dir/**/*GEOT14246*' '${f//GEOT14246/GEOT15000}'

Обратите внимание, что это заменяет GEOT14246 в именах файлов также. Вам нужны кавычки вокруг обоих аргументов потому что zmv анализирует их снова.

На Linux, с ударом или zsh, можно использовать rename вместо этого. Это заменяет только первое вхождение GEOT14246 в каждом пути.

rename GEOT14246 GEOT15000 /path/to/starting/dir/**/*GEOT14246*

В ударе необходимо включить ** рекурсивный шарик сначала с shopt -s globstar (добавьте эту строку к Вашему ~/.bashrc).

Если Вашим дистрибутивом Linux является Debian, Ubuntu или производная, rename команда является другой. Используйте любой из них:

rename.ul GEOT14246 GEOT15000 /path/to/starting/dir/**/*GEOT14246*
rename 's/GEOT14246/GEOT15000/g' /path/to/starting/dir/**/*GEOT14246*

4
26.12.2014, 22:37
4 ответа

Попробуйте CSPLIT: INGESFILE == FRAC.TXT , Выходные файлы == FRAC [NN] (где nn> 00, потому что файл # 00 пустым)

 csplit -f frac frac.txt /^1/ {*}
1
27.01.2020, 20:50

Форматирование линии Вы можете сделать только на SED SED :

sed -i 's/^\s*\|\s*$//g ; s/\s\s*/ /g ; /[{}]/!s/ /\n/g ; /^\s*$/d' *.txt
1
27.01.2020, 20:50

Я помещаю ваш пример данных в ./ Файл , как:

cat >file <<\IN
# all of your example
IN 

, то я сделал следующее:

sed -n 's|\([^ ]*\) *{.*|/\1 {/,/}/w file.\1.par|p' file | 
sed -e 's/  */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' -f - file

, который использует один процесс SED для обрезания данных в индлю И редактируйте его Insluam в режим работы SED скрипт для второго процесса SED .

Скрипт, который выполняется, выглядит как ...

/1_01 {/,/}/w file.1_01.par
/1_02 {/,/}/w file.1_02.par
/1_03 {/,/}/w file.1_03.par
/1_04 {/,/}/w file.1_04.par

... но только выполнен после второго SED делает для каждой строки в Файл ...

... -e 's/  */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' ...

... который сначала сжимает любую последовательность пробелов в одно пространство, удаляет ведущее или конечное пространство, если они остаются, полностью удаляет пустые строки от вывода, и последний переводит все пробелы в \ N Характер EWLINE для каждой строки, который не соответствует {.

Итак, для каждого номера строки, который соответствует (заголовок раздела) * {. * Второй SED W обряжает его и все последующие линии до и включая следующую встречущуюся } в входе в файл. (Рубрика раздела) , в то время как исходной интенсивности остается незатронутым.

После запуска, что я сделал ...

cat <./file.1_01.par

... и ...

1_01 { ; quite good spirals 
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}

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

У меня также было поехать в ссылку в вашем вопросе ...

sed -n 's|.\([^ ]*\) {.*|/\1 {/,/^}$/w \1.par|p' <<-IN |\ 
sed -e 's/.//;/{/!y/ /\n/' -f - all.par
    $(curl -s 'http://www.calresco.org/pic3/calres3.par' |
    tr -s '\r\n ' '\n  ' |tee all.par)
IN

, которые разделились все .par функции в свои собственные файлы - и обрабатывали DOS Линейные окончания:

ls -C
a46.par       bugeyed.par  flocks.par    iconw2b.par   manchaos.par  swirl5.par
aciddrop.par  burr.par     galaxy.par    juliland.par  mandelzm.par  trific.par
all.par       complex.par  highrise.par  lace.par      redgiant.par
angfish.par   eyeeye.par   iconvolc.par  lavaflow.par  scythe.par

Они все названы для имени функции.

cat galaxy.par

galaxy {;Chris Lucas
reset=1950
type=julia
center-mag=+0.03023290053994965/+0.26628255550711930/42.69126/1/67.5
params=-0.1582146627566066/0.6550294654497986
float=y
maxiter=30000
colors=000000GFF<28>x11z00z10<29>zx0zz0zz1<29>zzxzzzzzz<61>zV1zU0zU0zT0<\
28>z10z00z00y00<30>c00b11a11`22_22<25>FFF
}
-121--83247-

Обновлено: Shapified и проверено в Gawk (v.3.1.8) и MAWK (v. 1.3.3 )

Этот скрипт awk должен делать то, что вы, кажется, просят; Это может работать над другими реализациями AWK, которые поддерживают регулярные полевые и рекордно-разделители:

#!/usr/bin/awk -f

BEGIN {
  RS="}\n\n?"
  ORS="}\n"
  FS="\n"
  OFS="\n"
}

{
  # compress whitespace in first field
  gsub(/[ \t\n]+/," ",$1)

  # split remaining fields on whitespace
  for (i=2;i<=NF;i++) {
      gsub(/[ \t\n]+/,"\n",$i)
  }

  # remove double-newlines resulting from trailing whitespace
  gsub("\n\n+","\n",$0)

  print > NR".par"
}

тестирование с вашим вводом в виде file.txt :

$ ./split.awk file.txt

затем

$ cat 1.par
1_01 { ; quite good spirals 
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}

и

$ cat 3.par
1_03 { ; OK, bit dull, not zoomed in far 
reset=2000
type=mandel
passes=1
corners=0.3734922373/0.3820837907/-0.243292645/-0.23684898
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}
3
27.01.2020, 20:50

Я помещаю свой пример данных в ./ Файл , как:

cat >file <<\IN
# all of your example
IN 

, то я сделал следующее:

sed -n 's|\([^ ]*\) *{.*|/\1 {/,/}/w file.\1.par|p' file | 
sed -e 's/  */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' -f - file

, который использует один SED процесс Чтобы обрезать данные в индлю и редактировать его в режиме работы SED сценарий для второго SED .

Скрипт, который выполняется, выглядит как ...

/1_01 {/,/}/w file.1_01.par
/1_02 {/,/}/w file.1_02.par
/1_03 {/,/}/w file.1_03.par
/1_04 {/,/}/w file.1_04.par

... Но он выполнен только после второй SED делает для каждой строки в Файл ...

... -e 's/  */ /g;s/^ //;s/ $//;/./!d;/{/!y/ /\n/' ...

... который сначала сжимает любую последовательность пробелов в одно пространство, удаляет ведущее или промежуточное пространство, если они остаются, полностью удаляет пустые строки от вывода, и последний переводит все пробелы в \ N Характер EWLine для каждой строки, который не соответствует {.

Итак, для каждого номера строки, который соответствует (заголовок раздела) * {. * Второй SED w обряжает его и все последующие линии до и включая следующую встречущуюся } в входе в файл. (Секционная заголовка) , в то время как исходное напряжение остается беззаботно.

После запуска, что я сделал ...

cat <./file.1_01.par

... и ...

1_01 { ; quite good spirals 
reset=2000
type=mandel
passes=1
corners=-0.6014129278/-0.5990935452/0.427747516/0.429487053
params=0/0
float=y
maxiter=1000
inside=0
outside=15
distest=1/10/320/200
}

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

У меня также было поехать в ссылку в вашем вопросе ...

sed -n 's|.\([^ ]*\) {.*|/\1 {/,/^}$/w \1.par|p' <<-IN |\ 
sed -e 's/.//;/{/!y/ /\n/' -f - all.par
    $(curl -s 'http://www.calresco.org/pic3/calres3.par' |
    tr -s '\r\n ' '\n  ' |tee all.par)
IN

, которые разделились все .par функции в свои собственные файлы - и обрабатывали DOS Коннечки линии:

ls -C
a46.par       bugeyed.par  flocks.par    iconw2b.par   manchaos.par  swirl5.par
aciddrop.par  burr.par     galaxy.par    juliland.par  mandelzm.par  trific.par
all.par       complex.par  highrise.par  lace.par      redgiant.par
angfish.par   eyeeye.par   iconvolc.par  lavaflow.par  scythe.par

Они все названы для имени функции.

cat galaxy.par

galaxy {;Chris Lucas
reset=1950
type=julia
center-mag=+0.03023290053994965/+0.26628255550711930/42.69126/1/67.5
params=-0.1582146627566066/0.6550294654497986
float=y
maxiter=30000
colors=000000GFF<28>x11z00z10<29>zx0zz0zz1<29>zzxzzzzzz<61>zV1zU0zU0zT0<\
28>z10z00z00y00<30>c00b11a11`22_22<25>FFF
}
2
27.01.2020, 20:50

Теги

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