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
的输出,请看您能做些什么让我知道我的答案是否对您有帮助?