我想从“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 完全陌生,有没有更好的方法我没有看到?