从最后一个值中减去文本

从最后一个值中减去文本

我有一个如下所示的文本文件。我想根据扩展名检查文件类型并执行操作。

Example.2019.txt
Example.test.2019.txt
Example.test.2019.txt.gz
Example.test.2019.txt.Z

我用的cut -d'.' - f3是第一种记录格式。有用。但当它为其他人服务时,它就不起作用了。还尝试了以下awk命令。

awk -F'\t' '{print $(NF-sub(/..+$/,"",$1)1}' 

从最后一个字段中获取点的第一次出现并打印该值,但我认为我犯了一些语法错误并且不起作用。

答案1

while IFS= read -r line; do
    case $line in
        *.txt)
            some_txt_action
            ;;
        *.gz)
            some_gz_action
            ;;
        *.Z)
            some_Z_action
            ;;
        *)
            echo 'Did not match a pattern'
    esac
done <filelist

或者,为了更精确地匹配文件名后缀,

while IFS= read -r line; do
    case $line in
        *.txt)
            some_txt_action
            ;;
        *.txt.gz)
            some_txtgz_action
            ;;
        *.txt.Z)
            some_txtZ_action
            ;;
        *)
            echo 'Did not match a pattern'
    esac
done <filelist

上面的两个循环都会从文件中读取文本行filelist。然后它将根据从文件中读取的行尾执行操作。

代码中的some_XXX_action是占位符,您需要将其替换为遇到与该特定模式匹配的文本行时要执行的实际操作。

相关内容