Я хотел бы извлечь пути файлов из разных каталогов, перечисленных внутри файла после «FILE_PATHS», а затем извлечь определенную часть этих имен файлов на основе при условии. Например:Grep список файлов из файла и печать определенной части строки с условием
$ 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
Из этого списка путей к файлам, я хотел бы, чтобы извлечь определенную часть имени файла «МАМА», «SIB», «REL», «ОТЕЦ», а затем, если эта часть равен «SIB» print «BROTHER», если он равен «REL» печатать «AUNT», в противном случае (для «MOTHER» и «FATHER») напечатайте «MOTHER» и «ОТЕЦ». Единственные файлы, у которых есть путь, отличный от остальных, равны «SIB» и «REL» в 4-м поле, однако осложнение состоит в том, что существует много вариантов того, что может быть значением на 6-м поле, поэтому Я ищу решение, в котором мне не нужно указывать значения «BROTHER» и «AUNT» в 6-м поле, но это просто напечатает мое 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, есть ли лучший подход, которого я не вижу?
Чтобы уточнить, хотите ли вы распечатать компонент * после * SIB или REL (что может быть, предположительно, SISTER или UNCLE или что-то еще)? – chepner
Только компоненты, например: MOTHER, BROTHER, AUNT, FATHER .. – user1642995