Разделить файл на основе начального и конечного XML-тегов

Одним из способов было бы сделать следующее:

find ~ -type f -iregex  '.*javascript.*\.pdf' -printf %f"*"%h | awk -F* '{ system("ln -s "$2"/"$1" "$2"/js_books/"$1) }'

Запустите команду find и напечатайте имя файла, за которым следует звездочка, а затем путь к каталогу. Запустите это через awk, разделив имя файла и каталог и создав команду ln для выполнения с системной функцией awk.

Имейте в виду, что это открыто для команды inject, а также используйте print для вывода команды на экран перед запуском последней команды в системе.

0
19.03.2020, 22:48
1 ответ

Я не думаю, что это возможно с split. Вы можете использоватьawk:

awk '
  BEGIN{ 
    fmt="segment%02d"               # 2 digits for suffix, zero padded
    start="<test xsi:type=\"update\" locale=\"en_US\">"
    end="</test>"
  }
  $0 == start, $0 == end{
    if ($0 == start && ++cnt%2==1){ # for every 2nd start element...
      fname=sprintf(fmt, fcnt++)    # update output filename
    }
    print $0 > fname                # print line, redirect output to fname
  }
' test.xml

Это создает два файла segment00и segment01:

.
$ head segment*
==> segment00 <==
<test xsi:type="update" locale="en_US">
<rval>1</rval>
</test>
<test xsi:type="update" locale="en_US">
<rval>1</rval>
</test>

==> segment01 <==
<test xsi:type="update" locale="en_US">
<rval>1</rval>
</test>
1
28.04.2021, 23:20

Теги

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