我想做以下事情:
- 使用命令查找一组特定的文件
find
; - 对于任何找到的文件,将选项的相应输出
-printf
放入名为的变量中str
并将其传递给 Gawk(并且不要在其他任何地方打印/使用该输出); - 针对相应文件执行 Gawk 程序。相应变量的内容
str
必须在程序中可用。
例如,我有一个名为 的目录/d/ir
。它包含两个文件,file1.txt
和file2.txt
。这些文件采用 UTF-8 编码。名为 的文件file1.txt
包含以下两行文本:
A
BC
文件大小为4字节。
文件名为,file2.txt
包含以下三行文本:
D
EF
GHI
文件大小为8字节。
我想打印所有这些行,并在每行后面附加相应的内容str
(文件名、文件大小)。因此预期输出是
A;d/ir/file1.txt,4
BC;d/ir/file1.txt,4
D;d/ir/file2.txt,8
EF;d/ir/file2.txt,8
GHI;d/ir/file2.txt,8
我尝试了以下命令:
LC_ALL=en_US.utf8; find "/d/ir" -name "file*.txt" -type f -printf "%p,%s" -execdir gawk -v str="$7" '{
print($0 ";" str)
}' "{}" \+
(在这里我希望$7
,作为位置参数,将引用"%p,%s"
)但它不会打印预期的输出:它显示两个输出-printf
(我不希望发生这种情况),然后五行没有所需的数据str
。
正确的命令是什么?请注意,我不希望该-printf
选项的输出在 Gawk 上下文之外显示/打印:我只想将它们传递给 Gawk,这样只有 Gawk 程序知道如何使用它们。如果 Gawk 程序根本不使用它们,则它们不应该显示在任何地方。
由于该命令将用于许多文件,因此最大化性能和最小化内存消耗非常重要。