![](/img/trans.png)
[英]bash: how to implement the output of 'wc -l' as an argument to another script
[英]How to subtract the number of the wc -l output in bash script?
我希望输出过滤掉文件中特定行的数量,所以我计算了我需要和不需要的内容并做减法。 但不知何故,输出并没有改变。
这是我的脚本:
#!/bin/bash
for file in "$1"/*;
do
cat "$file" | while read line;
do
countContent1="$(grep '\(<Content>\)' | wc -l)"
countContent2="$(grep '\(showReview\)' | wc -l)"
valuableReviews="$(($countContent1-$countContent2))"
echo "$(b=${file##*/}; echo ${b%.*})" $valuableReviews
done
done | sort -r -n -k 2
请注意, <content>
和showReview
在文件中位于同一行。 输出只是包含<content>
的行数,没有减法。
这是文件的一部分:
<Author>lass=
<Content>Empfehlenswert.... showReview(11348491, 'full');
<Date>Sep 28, 2006
<No. Reader>-1
<No. Helpful>-1
<Overall>4
<Value>-1
<Rooms>4
<Location>-1
<Cleanliness>5
<Check in / front desk>-1
<Service>4
<Business service>-1
如果您取出内部while read
循环,这更有意义:
#!/bin/bash
for file in "$1"/*; do
countContent1=$(grep -c '[<]Content[>]' <"$file")
countContent2=$(grep -c 'showReview' <"$file")
valuableReviews=$((countContent1 - countContent2))
b=${file##*/}; b=${b%.*}
echo "$b $valuableReviews"
done | sort -r -n -k 2
笔记:
"$file"
重定向到grep
每个副本,因此 grep 计算文件中的内容而不是stdin 上的内容。while read
循环,并让grep
遍历每个文件的各个行,而不是尝试在 bash 中执行此操作。 (因此,我们现在每个文件运行 grep 两次,而不是每个文件的每行两次)。$(...)
有显着的性能损失(低于运行外部命令,但仍远高于在父进程中执行所有操作)。这将是快还是只用一个AWK的副本替换整个程序:
#!/bin/awk -f
/[<]Content[>]/ {
++allContent
if ($0 ~ /showReview/) {
++valuableReviews
}
}
FILENAME != fn {
if(fn) { print(fn, ": ", (allContent - valuableReviews)); }
allContent = 0; valuableReviews = 0; fn = FILENAME;
}
END {
print(fn, ": ", (allContent - valuableReviews))
}
...称为./theAwkScript "$1"/*
:>cat file1.txt
<Author>lass=
<Content>Empfehlenswert.... showReview(11348491, 'full');
<Date>Sep 28, 2006
<No. Reader>-1
<No. Helpful>-1
<Overall>4
<Value>-1
<Rooms>4
<Location>-1
<Cleanliness>5
<Check in / front desk>-1
<Service>4
<Business service>-1
:>echo -e "Lines with content $(grep -c Content file1.txt)\nLines with showReview $(grep -c showReview file1.txt)"
Lines with content 1
Lines with showReview 1
:>
grep -c Content file1.txt -- Count of lines matching pattern
$() --> Run some command
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.