我想用存在于另一个文件的每一行中的几个变量替换文本文件中的字符串,然后以新名称保存目标文件。下面是一个示例和我的代码:
$ cat ref # contains variables as the name in each line
item1
item2
item3
$ cat main # main inventory. the string xxx will be replaced with item# and modified file to be saved under the same variable name
sale inventory
this record is for xxx
end of inventory
所需的输出文件[3个文件。下面是item1]:
$ cat item1
sale inventory
this record is for item1
end of inventory
我的代码awk
awk -v fname=ref($0) '/xxx/ {$5 = fname}1' main >> "$fname"
Error: syntax error: got (, expecting Newline
先谢谢你的帮忙
5条答案
按热度按时间thtygnil1#
可以使用类似的
awk
方法来收集数组中的记录。下面的ref
项目被收集在item
数组中,来自main
的记录被收集在main
数组中。END
规则用于在main
的第二个记录上进行替换,将输出重定向到以项目命名的文件,例如:(注意:
if (j == 2)
行只是限制了sub(...)
被调用到第二行的次数,如果你想检查并替换每一个"xxx"
出现的itemX
,你可以去掉if(...)
,然后选择gsub(...)
或sub(...)
,这取决于每行"xxx"
是否可以出现多个)示例使用/输出
在包含
ref
和main
文件的目录下的命令行中粘贴上述内容,将产生:内容:
如果你有问题就告诉我。
f2uvfpb92#
一种
awk
方法:备注:
awk
中止,并出现错误,指出它耗尽了文件描述符ref
中的行数,main
中的MB字节)这产生:
t1qtbnec3#
为了实现它,你可以像这样在循环中使用
awk
:使用
sed
的替代版本:u3r8eeie4#
这里的解决方案只有
awk
后,创建一个输出目录out/
,我使用的是附带的readfile扩展。ru9i0ody5#
我会用Ruby来做这样一个项目:
或者Perl:
或者你可以使用Bash/sed:
任何这些结果: