Bash 操纵tee的输出以获取要写入的数据和文件名

Bash 操纵tee的输出以获取要写入的数据和文件名,bash,pipe,tee,Bash,Pipe,Tee,所以,我有一种情况,我把一些数据放大,通过管道传输到其他东西,然后输出到一个文件 在这中间,我想输出到另一个文件,其中要写入的文件名和要写入的数据都在我刚才用灰色标出的行中指定(以冒号分隔) 文件记录采用以下格式: <filename>:<filedata> 额外tee语句的输出将是名为upd_*的文件,而不是具有相同内容的del_*文件(实际上,在该点上保存与另一个文件匹配的文件路径的值不同,但为了简化,我去掉了一些语句),以及tee将在这里的示例中处理的字符串,因为

所以,我有一种情况,我把一些数据放大,通过管道传输到其他东西,然后输出到一个文件

在这中间,我想输出到另一个文件,其中要写入的文件名和要写入的数据都在我刚才用灰色标出的行中指定(以冒号分隔)

文件记录采用以下格式:

<filename>:<filedata>
额外tee语句的输出将是名为upd_*的文件,而不是具有相同内容的del_*文件(实际上,在该点上保存与另一个文件匹配的文件路径的值不同,但为了简化,我去掉了一些语句),以及tee将在这里的示例中处理的字符串,因为上面列表中的最终记录是

162975_SRVR.NP:A-3617332XXX

然后应该将值“A-3617332XXX”附加到文件upd_162975_SRVR.NP

过滤在子流程中完成

$ cat <<END | tee >(
    grep file1 | cut -d: -f2- >out1.txt
)
file1:data1
file2:data2
END

$ cat out1.txt
data1
-H
grep选项被删除,因为每个文件都在循环中处理


| cut-d:-f2
不再需要

您能给我们一些输入和输出示例吗?与其说明您的尝试失败的原因,不如花些时间解释您的要求。我相信,有更简单的方法来使用你的
grep
sed
cut
来简化命令。我已经用一个例子更新了这个问题。嗨,Nahuel。该示例的输出是2个文件,file1和file2。文件1包含“数据1”。文件2包含“数据2”。也没有结束标记,只有数据行。该命令只是一个示例,应该进行调整。有趣的部分是
|tee>(..>outputfile)
如何将第二个字段仅从管道中该点的当前值转换为第一个字段从管道中该点的当前值定义的输出文件?(具体示例请参见上面我修正问题的结尾)感谢您的澄清!
162975_SRVR.NP:A-3617332XXX
$ cat <<END | tee >(
    grep file1 | cut -d: -f2- >out1.txt
)
file1:data1
file2:data2
END

$ cat out1.txt
data1
for file in del_[0-9]*; do
    [[ -e $file ]] || continue
    grep -Ev '^ *$' "$file" | tee "upd_${file#del_}"
done |
    sort -u > delcache