我想将某些行放入shell脚本中的两个不同文件中。我该怎么做这个的语法。
示例:
for循环打印6行,我希望前两行应该附加到第一个文件,最后4行应该附加到另一个文件。
答案 0 :(得分:0)
for循环打印6行,我希望前两行应该 被附加到第一个文件,最后4行应该附加到 另一个文件。
没有办法。一种选择是将所有内容重定向到文件,然后将日志的所需部分复制到其他文件。
for i in {1..6}; do
echo $i > log
done
head -4 log >> logfile1 # Appends the first four lines to logfile1
tail -2 log >> logfile2 # Appends the last two lines to logfile2
答案 1 :(得分:0)
如果您正在使用BASH,则可以使用tee
使用process substitution的组合同时向head -n2
和tail -n4
发送相同的输入和管道:
$ for i in {1..6}; do echo $i; done | tee >(head -n2 >first2.txt) | tail -n4 >last4.txt
$ cat first2.txt
1
2
$ cat last4.txt
3
4
5
6
默认情况下,tee
获取其STDIN并将其复制到指定为参数的文件以及STDOUT。由于进程替换返回/dev/fd
路径到文件描述符(echo >(true)
以查看示例),tee
能够像任何其他常规文件一样写入该路径。
这里是替换后tee
命令的样子:
tee /dev/fd/xx | tail -n4 >last4.txt
或者更直观地说:
tee | tail -n4 >last4.txt
:
/dev/fd/xx
:
:..>(head -n2 >first2.txt)
因此输出被复制到head
进程(其输出被重定向到first2.txt
)和输出到tail
进程的STDIN:
请注意,进程替换是BASH主义,因此如果您使用不同的shell或关注POSIX合规性,则可能无法使用。