Books.txt
책 이름과 대출자의 이름이 포함된 파일이 있습니다 . BOOKXXXX는 책의 제목이고 XXXX는 번호입니다. 여기에 예가 있습니다.
BOOK2592,1,2,3,4,5,22
BOOK1234,3,4,5
BOOK0999,4,5,6,7
BOOK0666,10,33,4,5
BOOK2222,1,3,4,5,6,7,88,98,3
이 파일을 사용하여 특정 계정에서 이 책을 빌렸는지 확인해야 합니다.
이 책을 몇 번이나 대출받았는지 알아보고 싶은데 해결책이 떠오르지 않네요?
답변1
가지다진짜 일부 독립적인원래 질문의 요청이지만 "계정을 빌린 책"에 대답하기 위해 awk를 사용하는 것은 다음과 같습니다.
cat book.sh
#!/bin/bash
awk -F"," -v acc=$1 '
{
for(i=2;i<=NF;i++){
if($i ~ acc ){
print $1
}
}
}' Books.txt
그러면 다음과 같은 출력이 제공됩니다.
$ ./book.sh 4
BOOK1234
BOOK0999
답변2
Perl은 뛰어난 텍스트 처리 언어입니다. 구문은... 놀랍지만 데이터 구조는 매우 유연합니다.
perl -F, -lane '
$book = shift @F;
$books{$book} = [@F];
push @{$users{$_}}, $book for @F;
}
END {
$book="BOOK1234";
printf "book %s has been borrowed %d times, by users %s\n",
$book,
scalar(@{$books{$book}}),
join(",",@{$books{$book}});
$user="1";
printf "user %s has borrowed %d books, %s\n",
$user,
scalar(@{$users{$user}}),
join(",",@{$users{$user}})
' Books.txt
book BOOK1234 has been borrowed 4 times, by users 1,2,3,4
user 1 has borrowed 2 books, BOOK1234,BOOK2334
답변3
이를 수행하는 데는 여러 가지 옵션이 있습니다
파일을 grep하여 ISBN을 찾은 다음 grep하여 계정을 찾을 수 있습니다.
# grep account books.txt | cut -d "," -f1
이것을 출력하다
BOOK0999
또는 awk를 사용하여 필요한 것을 필터링할 수 있습니다.
awk -F ',' '/9/ { print $1} ' books.txt
이것을 출력하다
BOOK0999
스크립트를 원한다면 이렇게 할 수 있습니다
#!/bin/bash
acct=$1
while read line; do
if [[ $line =~ $1 ]]; then
echo $line | cut -d "," -f1
fi
done < books.txt
그리고 스크립트를 실행하세요./script acctno