![](/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.