mar*_*ian 1 unix bash awk unique xargs
我需要计算大量文件的第二列元素的出现次数.我正在使用的脚本是这样的:
{
el[$2]++
}
END {
for (i in el) {
print i, el[i] >> "rank.txt"
}
}
Run Code Online (Sandbox Code Playgroud)
为了在我使用find | xargs这种方式的大量文件上运行它:
find . -name "*.txt" | xargs awk -f script.awk
Run Code Online (Sandbox Code Playgroud)
问题是,如果我计算输出文件的行数rank.txt(带a wc -l rank.txt),我得到的数字(例如7600)大于第二行的唯一元素数(例如7300),我得到的数字A :
find . -name "*.txt" | xargs awk '{print $2}' | sort | uniq | wc -l
Run Code Online (Sandbox Code Playgroud)
实际上给了一个:
awk '{print $1}' rank.txt | sort | uniq | wc -l
Run Code Online (Sandbox Code Playgroud)
我获得了正确数量的元素(按照示例我将得到7300).所以这意味着输出文件第一列的元素不是唯一的.但是,这不应该发生!你们有人有任何线索吗?
谢谢你的帮助.
这可能是输入文件(*.txt)包含非唯一元素和xargs功能的结合.请记住,当存在大量文件时,使用不同的参数集重复调用xargs.这意味着在第一个示例中,如果存在大量文件,则在一次awk运行中不会处理某些文件,这会导致输出中"唯一"元素的数量更多.
你可以试试这个:
find . -name "*.txt" | xargs cat | awk -f script.awk
Run Code Online (Sandbox Code Playgroud)