linux - 根据键拆分文件并使用键名命名输出

标签 linux awk

有谁知道如何根据键拆分文件并用相应的键名命名相关输出。提前致谢

输入

>mail9.country1(+):38689378-38709400
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>father
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>mother
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>son
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>daughter
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------

>mailX.countryX(+):000000-3111111110
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>father
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>mother
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>son
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>daughter
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------

输出文件应如下所示,包含各自的内容

mail9.country1(+):38689378-38709400.mail

>mail9.country1(+):38689378-38709400
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>father
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>mother
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>son
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>daughter
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------

mailX.countryX(+):000000-3111111110.mail

>mailX.countryX(+):000000-3111111110
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>father
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>mother
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>son
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------
>daughter
XXXXXXXXXXXXXXXXX-----------HHHHHHHH------

最佳答案

awk 的一种方式:

$ awk -F'>' '$2~/^mail/{f=$2".mail";gsub(/[)(]/,"_",f)}{print > f}' file

关于linux - 根据键拆分文件并使用键名命名输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19808253/

相关文章:

c - 是否可以将两个以上的标准流连接到 Linux 中的终端?

linux - awk 按列对特定组求和

regex - sed:保持模式并重新排列行

linux - 如何仅批量重命名部分文件名?

java - 如何使用 sed 或 awk 编辑很长的 Java 类

linux - 内核是否仅在发生异常时执行

linux - 如何从 TCL shell 执行 Linux 命令?

linux - GUI 使用 Shell 批处理文件

java - Issue detecting PCSCvia program on linux, 读卡器已连接

bash - 如何在现有 txt 文件中用 Bash 编写第二列