【发布时间】:2018-06-17 02:05:13
【问题描述】:
我有一个充满 .txt 文件的目录,每个文件都有两列和多行 (>10000)。对于这些文件中的每一个,我都试图在第二列中找到最大值,并将第 1 列和第 2 列中的相应条目打印到输出文件中。为此,我有一个有效的 awk 命令。
find ./ -name "*.txt" | xargs -I FILE awk '{if(max<$2){max=$2;datum=$1}}END{print datum, max}' FILE >> out.txt
但是,我还想用每对数字打印相应输入文件的名称。输出类似于:
file1.txt datum1 max1
file2.txt datum2 max2
为此,我试图从这个类似的问题中汲取灵感: add filename to beginning of file using find and sed, 但我无法得到一个可行的解决方案。到目前为止,我的最大努力看起来像这样
find ./ -name "*.txt" | xargs -I FILE echo FILE | awk '{if(max<$2){max=$2;datum=$1}}END{print datum, max}' FILE >> out.txt
但我得到了错误:
awk:无法打开文件 FILE
源代码行号 1
我尝试了各种其他方法,可能距离正确还有几个字符:
(1)
find ./ -name "*.txt" | xargs -I FILE -c "echo FILE ; awk '{if(max<$2){max=$2;datum=$1}}END{print datum, max}' FILE" >> out.txt
(2)
find ./ -name "*.txt" -exec sh -c "echo {} && awk '{if(max<$2){max=$2;datum=$1}}END{print datum, max}' {}" \; >> out.txt
我不介意使用什么命令(xargs 或 exec 或其他),我只关心输出。
【问题讨论】:
-
你说你有一个 "full" 文件目录 - 请问大概有多少?
-
大约10,000个文件,每个文件的行数大约为100,000