使用AWK拆分file1,然后根据file2中的行命名新文件

时间:2015-02-24 20:32:24

标签: bash awk sed

文件1多次<PhotoField1>之间有长串数据。

示例:

<PhotoField1>alidkfjaeijwoeij<PhotoField1>akdfjalskdfasd<PhotoField1>

文件2包含我想用来标记文件的ID列表

示例:

A00565415
A00505050
A54531245

我有一个AWK命令来解析来自File1的<PhotoField1>之间的每个字符串到它自己的文件中,但是它只使用数字标记temp文件:

awk -v RS="<PhotoField1>" '{ print $0 > "temp" NR }' File1.xml

我需要用第二个文件中的一行替换temp *部分

所以新文件名为A00565415,A00505050,A54531245等。   - 如果我可以在文件末尾添加.txt,那就太棒了:A54531245.txt

awk命令非常适合将它分成不同的文件,但我需要能够根据File2列表命名它们。

2 个答案:

答案 0 :(得分:2)

awk 'NR==FNR{fname[NR]=$0".txt";next} {print > fname[FNR]}' File2.list RS="<PhotoField1>" File1.xml

答案 1 :(得分:1)

你可以使用这个awk:

awk -v RS="<PhotoField1>|\n" 'FNR==NR{a[NR]=$0; next} 
      NF{ print $0 > a[FNR] ".txt" }' file2 file1