Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【シェルスクリプト】大学の公募で、著者リストの何人中何番目か数えるスクリプト

ググったけど、なかったので作った

「なんでこんなのが必要なの?」と横にいた外国人に笑われたけど、そういう文化なんだからしょうがない・・・
無駄なものだとは分かってるが、応募者が多すぎてこんなところを指摘されて足切りされたらたまったもんじゃないので、しょうがなく従ってる感じ

コード

#!/bin/bash

name=$1
bib=$2
out=/tmp/author.txt

cat $bib | grep "author" | tr -d { | tr -d } | awk -F"author =" '{print $2}' | awk -F"$name" '{print $1}' | sed 's/ and /\n/g' > $out
ii=`wc $out | awk '{print $1}'`

cat $bib | grep "author" | tr -d { | tr -d } | awk -F"author =" '{print $2}' | sed 's/ and /\n/g' > $out
nn=`wc $out | awk '{print $1}'`

echo "$nn 人中 $ii 番目"

rm $bib

使い方

./count_authors.sh Einstein ~/Downloads/IOPEXPORT_BIB.bib

こんな感じでどうでしょうか?

$1に検索ワード(自分の苗字とか)
$2にbibファイル

bibファイルの中で、authorという欄をとってくる、その名まで検索ワードが何番目か取り出す
nnは全体が何行あるか

文字列が何行目にあるか数えるのが意外と難しい
whileで一行ずつ渡してifで確認することも考えたけど、実行が遅すぎてやめた・・・
それなら、awkでファイルの中身を分断して、それをwcで数えたほうが圧倒的に早かった

最後のrmはいらなかったら消してください
何個もbibファイルをダウンロードすると上書き保存してくれないので、rmを追加したので

改良案

たまにセパレーターが and じゃなくて, な論文があります
そういうときは手でコードを修正してください・・・
おそらく、一度こういう作業を手ですれば、二度目以降は差分のみをみていくだけで良いので楽になるはずです

ランキング参加中です

↓クリックしていただけると嬉しいです〜