我需要一些帮助来组合脚本元素以形成读取输出。
基本上我需要为下面列出的文件夹结构获取用户的文件名,并使用文件类型* .ano
计算该用户文件夹中的行数。这在下面的摘录中显示,要注意文件名上的位置并不总是与前面相同。
/ home / user / Drive-backup / 2010 Backup / 2010 Account / Jan / usernameneedtogrep / user.dir / 4.txt
/ home / user / Drive-backup / 2011 Backup / 2010 Account / Jan / usernameneedtogrep / user.dir / 3.ano
/ home / user / Drive-backup / 2010 Backup / 2010 Account / Jan / usernameneedtogrep / user.dir / 4.ano
awk -F/ '{print $(NF-2)}'
这将为我提供我需要的用户名,但我还需要知道他们在该用户文件夹中有多少非空行用于文件类型* .ano。我有下面的grep工作,但我不知道如何将它们放在一起所以它可以输出一个有意义的文件。
grep -cv '^[[:space:]]*$' *.ano | awk -F: '{ s+=$2 } END { print s }'
需要输出示例
UserA 500
UserB 2
UserC 20
答案 0 :(得分:1)
find /home -name '*.ano' | awk -F/ '{print $(NF-2)}' | sort | uniq -c
如果您的awk是正确的,那么应该为每个用户提供“* .ano”文件的数量。我经常使用sort / uniq -c来计算字符串的实例数,在本例中是username,而不是'wc -l'只计算输入行。
享受。
答案 1 :(得分:0)
答案 2 :(得分:0)
从文件夹
执行下面的bash脚本/home/user/Drive-backup/2010 Backup/2010 Account/Jan
它将报告每个用户的非空行数。
#!/bin/bash
#save where we start
base=$(pwd)
# get all top-level dirs, skip '.'
D=$(find . \( -type d ! -name . -prune \))
for d in $D; do
cd $base
cd $d
# search for all files named *.ano and count blank lines
sum=$(find . -type f -name *.ano -exec grep -cv '^[[:space:]]*$' {} \; | awk '{sum+=$0}END{print sum}')
echo $d $sum
done
答案 3 :(得分:0)
要计算您可以使用的目录中的* .ano文件数
find "$dir" -iname '*.ano' | wc -l
如果要对某些目录中的所有目录执行此操作,可以使用for循环:
for dir in * ; do
echo "user $dir"
find "$dir" -iname '*.ano' | wc -l
done
答案 4 :(得分:0)
这可能是您想要的(未经测试):需要bash版本4用于关联数组
declare -A count
cd /home/user/Drive-backup
for userdir in */*/*/*; do
username=${userdir##*/}
lines=$(grep -cv '^[[:space:]]$' $userdir/user.dir/*.ano | awk '{sum += $2} END {print sum}')
(( count[$username] += lines ))
done
for user in "${!count[@]}"; do
echo $user ${count[$user]}
done
答案 5 :(得分:0)
这是另一种方法(在Mac OS X 10.6上):
find -x "$PWD" -type f -iname "*.ano" -exec bash -c '
ar=( "${@%/*}" ) # perform a "dirname" command on every array item
printf "%s\000" "${ar[@]%/*}" # do a second "dirname" and add a null byte to every array item
' arg0 '{}' + | sort -uz |
while IFS="" read -r -d '' userDir; do
# to-do: customize output to get example output needed
echo "$userDir"
basename "$userDir"
find -x "${userDir}" -type f -iname "*.ano" -print0 |
xargs -0 -n 500 grep -hcv '^[[:space:]]*$' | awk '{ s+=$0 } END { print s }'
#xargs -0 -n 500 grep -cv '^[[:space:]]*$' | awk -F: '{ s+=$NF } END { print s }'
printf '%s\n' '----------'
done