У меня есть текстовый файл sample.txt как
=====record1
title:javabook
price:$120
author:john
path:d:
=====record2
title:.netbook
author:paul
path:f:
=====record3
author:john
title:phpbook
subject:php
path:f:
price:$150
=====record4
title:phpbook
subject:php
path:f:
price:$150
, из которого я хочу разделить данные на основе автора, он должен быть разбит на 2 файла, которые содержат
test1.txt
=====record1
title:javabook
price:$120
author:john
path:d:
=====record3
author:john
title:phpbook
subject:php
path:f:
price:$150
и
test2.txt
=====record2
title:.netbook
author:paul
path:f:
, как и выше, я хочу классифицировать основной файл sample.txt на вложенные файлы на основе динамического поля автора.
#!/bin/bash
tr '\n' ' ' < sample.txt | sed 's:=====:\n=====:g' | sed 's: *$::g' >tmp1
grep "author:john" tmp1 | sed 's: :\n\t:g' > test1.txt
grep "author:paul" tmp1 | sed 's: :\n\t:g' > test2.txt
rm tmp1
команда «tr» заменяет каждый символ новой строки на пробел (весь файл теперь равен 1 строке)
это передается в «sed», что вызывает каждый «=====» начать на новой линии. Второй «sed» удалит завершающие пробелы. Все это отправляется во временный файл. Теперь у вас есть 1 «запись» на строку.
Первый «grep» будет читать из временного файла и выводить все записи, где «author» равен «john», эти записи передаются в «sed», который заменяет каждый пробел новой строкой с последующим табуляцией точно воспроизвести макет OP) и отправить его в файл с именем test1.txt
Второй идеал grep для «paul» и «test2.txt»
Последнее действие - удаление временного файла который больше не нужен,