.csv 파일이 있고 세 번째 열에는 YES 및 NO 값만 예상됩니다.
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|NO
Sample1|Sample2|MAYBE(random*)
Sample1|Sample2|MAYBE(random*)
참고: (random*)
여기에 존재할 수 있는 임의의 값을 나타냅니다.
따라서 내가 원하는 결과는 다음과 같아야 합니다.
Expecting value count: 5
YES = 4
NO = 1
Not expecting value count: 2
MAYBE = 2
YES와 NO 이외의 값이 없으면 내가 원하는 출력은 다음과 같아야 합니다.
Expecting value count:
YES = 4
NO = 1
Not expecting value count: 0
답변1
어쩌면 다음과 같은 것일 수도 있습니다.
tr '(' '|' < file | cut -d'|' -f3 | sort | uniq -c
답변2
AIX 호환 awk 솔루션은 다음과 같습니다.
BEGIN {
FS="|";
}
{
values[$3]++
}
END {
print "Expecting value count: " values["YES"] + values["NO"];
print "YES = " values["YES"];
print "NO = " values["NO"];
delete values["YES"];
delete values["NO"];
for (value in values)
unexpected += values[value];
if (unexpected) {
print "\nNot expecting value count: " unexpected;
for (value in values)
print value " = " values[value];
}
}
이름을 지정하려는 스크립트에 저장하세요.
이 예에서는 다음을 입력합니다.
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|YES
Sample1|Sample2|NO
Sample1|Sample2|MAYBE1
Sample1|Sample2|MAYBE2
Sample1|Sample2|MAYBE2
...출력은 다음과 같습니다.
$ awk -f i.awk < input
Expecting value count: 5
YES = 4
NO = 1
Not expecting value count: 3
MAYBE1 = 1
MAYBE2 = 2
...이 예제 입력의 경우:
Sample1|Sample2|YES
Sample1|Sample2|NO
Sample1|Sample2|NO
...출력은 다음과 같습니다.
$ awk -f i.awk < input2
Expecting value count: 3
YES = 1
NO = 2
Not expecting value count: 0
답변3
for i in $(cat l.txt | awk -F "|" '{print $3}' | sort | uniq); do
grep -c $i l.txt;
echo $i;
done | sed "N;s/\n/ /g"
l.txt에는 언급한 내용이 포함되어 있습니다. 출력은 다음과 같습니다
2 MABYE(random)
1 NO
4 YES
예상 및 예상치 못한 결과를 계산하려면 출력을 파일에 저장하고 예상에 대한 이전 명령의 출력 파일에 다음 명령을 사용할 수 있습니다.
egrep -i "NO|YES" |
awk '{print $1}' |
tr "\n" " " |
awk '{print "echo" " " $1 " " "+" " " $2 }' |
sed 's/^/"/g' |
sed 's/$/"/g' |
awk '{print $0"|bc -l"}' |
sed 's/"echo/echo "/g' |
sh