读取输入文件并将文本插入输出文件

时间:2016-01-22 14:45:16

标签: bash awk substitution

我有一个名为" namelist.txt"的输入文件。电子邮件地址:

user1@domain.com
user2@domain.com
user3@domain.com

我正在尝试从此输入文件中读取地址并将其值插入到应该读取的输出文件(newfile.txt)中:

user "user1@domain.com" with pass"pass" is "user1@domain.com" here
user "user2@domain.com" with pass"pass" is "user2@domain.com" here
user "user3@domain.com" with pass"pass" is "user3@domain.com" here

我最接近的是使用awk:

awk '{print "user $0 there with pass"pass" is user $0 here"}' < namelist.txt > newfile.txt

然而,这打印出以下内容:

user $0 there with pass is user $0 here 
user $0 there with pass is user $0 here
user $0 there with pass is user $0 here

这不会打印变量值,也不会打印&#34;传递&#34;值。

我不知道自己哪里出错了,或者我是否走在正确的轨道上,所以任何建议和/或指示都会受到高度赞赏。

编辑:

使用:

awk '{print "user \""$0"\" there with pass \"pass\" is user \""$0"\" here}' file

在Ubuntu(14.04.2 LTS)上产生以下输出:

&#34;通过&#34;传递&#34;是用户&#34; user1@domain.com
&#34;通过&#34;传递&#34;是用户&#34; user2@domain.com
&#34;通过&#34;传递&#34;是用户&#34; user3@domain.com

上述代码在UNIX终端中运行良好,但在Ubuntu和Raspberry Pi中都不行。

我对发行版之间的差异感到困惑。

2 个答案:

答案 0 :(得分:3)

$变量需要在引号之外,您需要转义要查看的引号。

awk '{print "user \""$0"\" there with pass\"pass\" is user \""$0"\" here"}' file

user "user1@domain.com" there with pass"pass" is user "user1@domain.com" here
user "user2@domain.com" there with pass"pass" is user "user2@domain.com" here
user "user3@domain.com" there with pass"pass" is user "user3@domain.com" here

答案 1 :(得分:2)

您已将文本$0包含在文字字符串中,但无论如何在将输入数据插入某些格式化字符串以进行输出时,如果您使用{{{},则通常最清晰且最容易增强1}}代替printf

print

并且不使用awk的输入重定向,因为这会删除脚本访问输入文件名的能力。 awk完全能够自己打开文件。