首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从左侧提取文件字符串,但从右起跟随第二个分隔符

从左侧提取文件字符串,但从右起跟随第二个分隔符
EN

Stack Overflow用户
提问于 2018-09-25 14:22:37
回答 2查看 102关注 0票数 2

下面是完整的文件名。

代码语言:javascript
复制
qwertyuiop.abcdefgh.1234567890.txt
qwertyuiop.1234567890.txt

尝试使用

代码语言:javascript
复制
awk -F'.' '{print $1}'

如何使用awk命令提取以下输出。

代码语言:javascript
复制
qwertyuiop.abcdefgh 
qwertyuiop

编辑

我在一个目录中有一个文件列表,我试图将时间、大小、所有者、文件名提取到单独的变量中。

用于文件名。

代码语言:javascript
复制
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
$ 

期望的

代码语言:javascript
复制
qwertyuiop.abcdefgh
EN

回答 2

Stack Overflow用户

发布于 2018-09-25 14:30:25

编辑:从Sundeep先生的解决方案中获得了灵感,并在本文中添加了以下内容。

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="."} {$(NF-1)=$NF="";sub(/\.+$/,"")} 1' Input_file

你能不能试着跟上。

代码语言:javascript
复制
awk -F'.' '{for(i=(NF-1);i<=NF;i++){$i=""};sub(/\.+$/,"")} 1' OFS="."  Input_file

代码语言:javascript
复制
awk 'BEGIN{FS=OFS="."} {for(i=(NF-1);i<=NF;i++){$i=""};sub(/\.+$/,"")} 1' Input_file

解释:在这里也添加了上面代码的解释。

代码语言:javascript
复制
awk '
BEGIN{                     ##Mentioning BEGIN section of awk program here.
  FS=OFS="."               ##Setting FS and OFS variables for awk to DOT here as per OPs sample Input_file.
}                          ##Closing BEGIN section here.
{
  for(i=(NF-1);i<=NF;i++){ ##Starting for loop from i value from (NF-1) to NF for all lines.
    $i=""                  ##Setting value if respective field to NULL.
  }                        ##Closing for loop block here.
  sub(/\.+$/,"")           ##Substituting all DOTs till end of line with NULL in current line.
}
1                          ##Mentioning 1 here to print edited/non-edited current line here.
'  Input_file              ##Mentioning Input_file name here.
票数 0
EN

Stack Overflow用户

发布于 2018-09-25 14:35:11

使用允许操作NFGNU awk和其他版本

代码语言:javascript
复制
$ awk -F. -v OFS=. '{NF-=2} 1' ip.txt
qwertyuiop.abcdefgh
qwertyuiop

  • NF-=2将有效地删除最后两个fields
  • 1是用于打印$0
  • Note内容的awk惯用法,该惯用法假定每行至少有两个字段,否则将出现错误

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

代码语言:javascript
复制
$ perl -F'\.' -lane 'print join ".", @F[0..$#F-2]' ip.txt
qwertyuiop.abcdefgh
qwertyuiop

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

代码语言:javascript
复制
$ sed 's/\.[^.]*\.[^.]*$//' ip.txt
qwertyuiop.abcdefgh
qwertyuiop
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52491802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档