为简化起见,此命令是否可以在每个目录中创建一个文件,其中包含*traffic*
个文件的总和。
命令:
find /config -maxdepth 2 -name "*traffic*" -exec awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum > "xx.txt"}' {} +
我不知道如何为每个用户awk
保存文件,因为我不仅有/config/mark/
,而且还有config/john
和/config/mary
,所以继续,不知道如何将文件保存在该目录中。
因此,预期的输出将是每个文件夹中的一个xx.txt
文件,其中仅包含当前文件夹中的*traffic*
个文件,因此/config/mark/
应该具有导出到的所有*traffic*
个文件的总和xx.txt
和/config/john
应该具有相同的内容,但仅包含/config/john
文件夹中的总和。
样本输入是00002 0000000000 0000051327 #test
放在一个文件中,并且在类似目录/config/mike/traffic1.txt
和/config/mike/traffic2.txt
的目录中还有另一个与此值00002 0000000000 0000331327 #test
类似的文件,并且输出应该只是文件的总和
我已经设法通过我能找到的来做到这一点,但是它是一个一个地添加文件,我需要它来将所有文件添加到工作目录中并求和。
find /config -name '*traffic*' -printf "$PWD:%p\n" | while IFS=":" read FPATH FNAME
do
echo "FNAME = $FNAME"
echo "FPATH = $FPATH"
echo ""
awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum >> "'$FNAME'xxxx"}' "$FNAME"
done
答案 0 :(得分:1)
好吧,我设法自己找到了一个解决方案,似乎$ PWD没有用,所以我改用%h这样的最终代码,假设我们在某些子文件夹中有一个包含 traffic 文件的文件夹配置/ config中,您要将流量文件中的数字添加到名为result.txt的文件中
这是代码:
find /config -name '*traffic*' -printf "%h:%p\n" | while IFS=":" read FPATH FNAME
do
awk 'BEGIN {sum=0} {for(i=1; i<=NF; i++) sum+=$i } END {print sum >> "'$FPATH/'result.txt"}' $FNAME
done
它将在每个发现流量文件的文件夹中创建一个result.txt
答案 1 :(得分:0)
使用GNU awk编写ENDFILE,gensub()和多字符RS(未经测试):
find /config -name '*traffic*' -exec \
awk -v RS='[[:space:]]+' '{sum+=$0} ENDFILE{print sum+0 >> gensub("[^/]+$","xx.txt",1,FILENAME); sum=0}' {} +
或:
find /config -type d -maxdepth 2 |
while IFS= read -r dir; do
awk -v RS='[[:space:]]+' '{sum+=$0} ENDFILE{print sum+0; sum=0}' "$dir"/*traffic* > "$dir"/xx.txt
done