我有一个文本文件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
从此我想根据作者拆分数据。它应该分成两个文件,其中包含:
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
根据作者字段动态地将主文件分类为子文件。
答案1
使用awk
将字段存储在变量中。当达到记录标记时,将字段写入相应的文件(使用作者名称)。
-F:
指定字段以“:”分隔
此行$1 ~ /author/ { author=$2 }
如果行的第一个字段是“author”,则将值存储在 author 变量中。这是必需的,因为必须有一个以 author 命名的文件来写入记录。
使用substr
()提取前五个字符,如果找到记录标记“=====”的开头,则将数据(存储在变量中rec
)写入相应的作者文件。
awk -F: '
$1 ~ /author/ { author=$2; }
{
if (substr($1,0,5) == "=====" && author != "") {
print rec >> (author".txt")
rec=$0; author=""
}
else
rec=rec "\n" $0
}
END { if (author != "") print rec >> (author".txt") }
' authors.txt