「FILE_PATHS」の後にファイル内にリストされているさまざまなディレクトリからファイルパスを抽出し、条件に基づいてこれらのファイル名の特定の部分を抽出したいと思います。例えば:
$ grep ^FILE_PATHS file.txt
FILE_PATHS /james/families/MOTHER/analyses/trait
FILE_PATHS /james/families/SIB/analyses/BROTHER/trait
FILE_PATHS /james/families/REL/analyses/AUNT/trait
FILE_PATHS /james/families/FATHER/analyses/trait
このファイルパスのリストから、ファイル名「MOTHER」、「SIB」、「REL」、「FATHER」の特定の部分を抽出し、この部分が「SIB」と等しい場合は「BROTHER」を出力します。 、「REL」と等しい場合は「AUNT」を出力し、そうでない場合(「MOTHER」および「FATHER」の場合)は「MOTHER」および「FATHER」を出力します。パスが他のファイルと異なるファイルは、4番目のフィールドの「SIB」と「REL」に等しいファイルだけですが、複雑なのは、6番目のフィールドの値に多くのオプションがあるためです。 6番目のフィールドに「BROTHER」と「AUNT」の値を指定する必要がないソリューションを探していますが、それでは6番目のフィールドが出力されます。
したがって、次のようになります。
cat file.txt | while read line; do
if [ `echo "$line" | grep ^FILE_PATHS file.txt | cut -d' ' -f 2 | cut -d '/' -f4 -eq "BROTHER" | "REL" ` ]
then
grep ^FILE_PATHS file.txt | cut -d' ' -f 2 | cut -d '/' -f5
else
grep ^FILE_PATHS file.txt | cut -d' ' -f 2 | cut -d '/' -f4
fi; done
これはエラーでいっぱいで間違っていますが、おそらく私は間違ったアプローチを一緒に持っています、そしてこれを行うための賢い方法があると確信していますが、私はBASHにまったく慣れていません、私が見ないより良いアプローチはありますか?