Unix 从左侧提取文件字符串,但从右侧提取第二个分隔符

Unix 从左侧提取文件字符串,但从右侧提取第二个分隔符,unix,awk,Unix,Awk,下面是完整的文件名 qwertyuiop.abcdefgh.1234567890.txt qwertyuiop.1234567890.txt 试图使用 awk -F'.' '{print $1}' 如何使用awk命令提取以下输出 qwertyuiop.abcdefgh qwertyuiop 编辑 我有一个目录中的文件列表 我试图将时间、大小、所有者、文件名提取到单独的变量中 用于文件名 NAME=$(ls -lrt /tmp/qwertyuiop.1234567890.txt | awk

下面是完整的文件名

qwertyuiop.abcdefgh.1234567890.txt
qwertyuiop.1234567890.txt
试图使用

awk -F'.' '{print $1}'
如何使用
awk
命令提取以下输出

qwertyuiop.abcdefgh 
qwertyuiop
编辑 我有一个目录中的文件列表 我试图将时间、大小、所有者、文件名提取到单独的变量中

用于文件名

NAME=$(ls -lrt /tmp/qwertyuiop.1234567890.txt | awk -F'/' '{print $3}' | awk -F'.' '{print $1}')
$ echo $NAME
qwertyuiop
$ 

NAME=$(ls -lrt /tmp/qwertyuiop.abcdefgh.1234567890.txt | awk -F'/' '{print $3}' | awk -F'.' '{print $1}')
$ echo $NAME
qwertyuiop
$ 
期望

qwertyuiop.abcdefgh
编辑:从Sundeep sir的解决方案中汲取灵感,并在此组合中添加以下内容

awk 'BEGIN{FS=OFS="."} {$(NF-1)=$NF="";sub(/\.+$/,"")} 1' Input_file
你能试试下面的吗

awk -F'.' '{for(i=(NF-1);i<=NF;i++){$i=""};sub(/\.+$/,"")} 1' OFS="."  Input_file

awk-F.''{for(i=(NF-1);i与
GNU-awk
以及允许操纵
NF

$ awk -F. -v OFS=. '{NF-=2} 1' ip.txt
qwertyuiop.abcdefgh
qwertyuiop
  • NF-=2
    将有效删除最后两个字段
  • 1
    是一种用于打印
    $0
  • 请注意,这假设每行中至少有两个字段,否则会出现错误

perl
的概念类似,如果行中的字段数小于3,则打印空行

$ perl -F'\.' -lane 'print join ".", @F[0..$#F-2]' ip.txt
qwertyuiop.abcdefgh
qwertyuiop
$ sed 's/\.[^.]*\.[^.]*$//' ip.txt
qwertyuiop.abcdefgh
qwertyuiop

使用
sed
,如果字段数少于3,则可以保留行

$ perl -F'\.' -lane 'print join ".", @F[0..$#F-2]' ip.txt
qwertyuiop.abcdefgh
qwertyuiop
$ sed 's/\.[^.]*\.[^.]*$//' ip.txt
qwertyuiop.abcdefgh
qwertyuiop

了解您真正在做什么,即解析
ls
的输出,请看您能做些什么让我知道我的答案是否对您有帮助?