我有一个文件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 文件查找书号,然后 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