gpt4 book ai didi

linux - Grep 从一个文件中获取一个文件列表并根据条件打印该行的特定部分

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:23 25 4
gpt4 key购买 nike

我想从“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 的新手,有没有更好的方法我没有看到?

最佳答案

易于使用 sed 只需捕获倒数第二个目录:

$ sed -r '/^FILE_PATHS/s#.*/(\w+)/.*#\1#' file
MOTHER
BROTHER
AUNT
FATHER

编辑:如果不总是倒数第二个目录:

$ grep "^FILE_PATHS" file | egrep -o "(MOTHER|BROTHER|AUNT|FATHER)"
MOTHER
BROTHER
AUNT
FATHER

关于linux - Grep 从一个文件中获取一个文件列表并根据条件打印该行的特定部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14523184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com