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