2015-02-24 37 views
1

文件1多次在<PhotoField1>之间有很长的数据串。使用AWK分割file1,然后根据文件2中的行命名新文件

例子:

<PhotoField1>alidkfjaeijwoeij<PhotoField1>akdfjalskdfasd<PhotoField1> 

文件2有,我想用它来标记文件ID列表

例子:

A00565415 
A00505050 
A54531245 

我有一个AWK命令来分析每个字符串从File1到<PhotoField1>到它自己的文件中,但它只能标记带有数字的文件temp:

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

我需要更换的临时*从第二个文件中的一个线部分

因此,新的文件将被命名为A00565415,A00505050,A54531245等。 - 它会如果我能成为优秀的在文件的末尾添加一个.txt文件:A54531245.txt

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

回答

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

这不正是我需要的,唯一奇怪这是我没有权限创建文件后他们。 – moore1emu 2015-02-24 22:45:36

+0

这与你的shell设置有关。男人umask。 – 2015-02-24 22:48:07

+0

某些原因使用数字后面的?.txt创建所有文件。我再次检查列表文件,他们没有空格,所以这些文件在SSH中看起来像这样:A00310433?.txt – moore1emu 2015-02-24 22:54:57

1

您可以使用此AWK:

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

这种工作,但它将文件中的数据限制为一行。 字符串是一个巨大的base64字符串。并且比PhotoField1的开启方式更重要 – moore1emu 2015-02-24 22:44:40

相关问题