如何在UNIX中将文件和字符串连接成一个新文件,作为一行命令?

11
我需要一个非常简单的(希望如此)一行命令,读取一个文件,在末尾添加一个字符串并将结果输出到一个新文件,而不改变原始数据。

我需要一个非常简单的(希望如此)一行命令,读取一个文件,在末尾添加一个字符串并将结果输出到一个新文件,而不改变原始数据。

file1               string
------              ------
apple               oranges
bananas

魔法命令

filel               file2
------              ------
apple               apple
bananas             bananas
                    oranges

基本上,cat file1 + 'oranges' > file2的意思是将文件file1和字符串'oranges'连接起来,然后将其输出到file2中。

我正在使用autosys运行该命令,我相当确定它不允许在单个命令中使用&&;


你提供的代码有什么问题? - Squazic
猫认为th +和'oranges'是文件,它说无法打开它们。 - Christian
你不能只是将file1的内容合并到file2中,再添加字符串吗?你甚至可以在一行命令中执行这两个命令。 - Tudor
这就是我想做的,但我还没有想出如何实现。我已经尝试了各种变化,例如 cat file1 > echo $string >> file2,但都没有成功。所以当你说“我不能吗?”时,我会说,我肯定能,但我还没有找到实际的命令。 - Christian
我想到了这个命令:cp file1 file2 && echo 'oranges' >> file2但是我正在使用autosys来运行该命令,我几乎可以确定它不会允许我使用&&将命令串在一起。 - Christian
3个回答

35

你可以这样做:

(cat file1 ; echo 'oranges') > file2

这将会产生一个子shell,该子shell将file1的内容输出到stdout,接着输出"oranges"。我们将捕获所有的输出并重定向到新文件file2中。

或者可以使用以下两个命令:

cp file1 file2 
echo 'oranges' >> file2

这个命令先将file1复制到新文件file2,然后在file2中追加单词“oranges”。

这里有另一个不使用分号或&&的单行命令。

echo oranges | cat file1 - > file2

是的,我也想到了这个方法,但因为我正在使用Autosys运行命令,所以我不认为我可以在命令中包含分号或&&。 - Christian
@Christian:它们真的需要成为一行吗?你不能把这两个命令放在一个shell脚本中并运行它吗? - Tudor
@Christian 最好先弄清楚在autosys中可以运行哪些命令。或者使用这里的最后一种方法,它可以运行2个连续的命令。 - nos
@tudor:我完全可以创建一个shell脚本并完成它。但由于工作原因,将事情放入不同的环境中需要更多的工作,因此一行代码可能是最好的选择。 - Christian
@nos:无法使用 && 和 ; 作为命令,但允许使用管道和 std_out。 - Christian
显示剩余2条评论

1

那么这应该能解决问题:

$cat file1 >> file2; echo "orange" >> file2;

不,第一个文件应该保持不变。 - tomdemuyt

1
awk '1; END{ print "oranges"}' file1 > file2

如果你将标准解决方案(由nos提供)作为字符串传递给sh,那么你可能可以使用它:

sh -c 'cat file1; echo oranges' > file2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接