首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用awk打印第二列,其余的文本从#

使用awk打印第二列,其余的文本从#
EN

Unix & Linux用户
提问于 2019-05-02 07:34:29
回答 4查看 2.6K关注 0票数 0

我的配置文件里有这样的行,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bindsym $mod+F2 exec gnome-terminal #Open terminal 
bindsym $mod+p exec command /some/path"  #Popup Dictionary  
bindsym $mod+Mod1+l exec --no-startup-id /some/path/command #Dmenu for my books collection
bindsym Mod1+Control+b exec rxvt -e nnn #nnn file browser

我想awk出第二列和#后面的内容。我使用awk作为

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '/bindsym/{print $2}' filename

不过,我不知道如何在#之后获得文本。首选输出是键,然后是注释文本,如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$mod+F2 Open terminal 
EN

回答 4

Unix & Linux用户

回答已采纳

发布于 2019-05-02 08:18:25

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ awk -v OFS='\t' '/^bindsym/ { key = $2; sub(".*#", ""); print key, $0 }' file
$mod+F2 Open terminal
$mod+p  Popup Dictionary
$mod+Mod1+l     Dmenu for my books collection
Mod1+Control+b  nnn file browser

这使用awk首先提取每行上的第二个字段,从bindsym开始到变量key中。然后删除行中的所有内容,包括行中的#,并打印key和行中剩余的内容,并以制表符作为分隔符。

替代输出格式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ awk '/^bindsym/ { key = $2; sub(".*#", ""); printf("%-20s\t%-20s\n", key, $0) }' file
$mod+F2                 Open terminal
$mod+p                  Popup Dictionary
$mod+Mod1+l             Dmenu for my books collection
Mod1+Control+b          nnn file browser

逻辑是相同的,但是输出为两个字段(左对齐)中的每个字段分配20个字符,并在它们之间放置一个制表符(以获得良好的度量)。

票数 2
EN

Unix & Linux用户

发布于 2019-05-02 08:23:14

使用GNU awkmatch()函数来匹配从#到行尾的部分

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '/bindsym/ && match($0,/#(.+)$/,arr){print $2, arr[1]}' filep

match()函数使用第二个参数中正则表达式中匹配的模式填充第三个参数中提供的数组。

在任何POSIX awk上,都不支持match()的第三个参数,而是一对特殊变量RSTARTRLENGTH,它们标志着匹配组的开始和长度。我们使用当前行上的substr()函数来获得匹配的字符串

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
awk '/bindsym/ && match($0,/#(.+)$/){print $2, substr($0,RSTART+1,RLENGTH)}' file

要漂亮地打印输出,可以像在另一个答案中一样使用printf()函数。

票数 2
EN

Unix & Linux用户

发布于 2019-06-11 12:24:40

sed中这样做非常简单;因为您的数据并不是真正面向字段的Awk,所以这里没有提供很大的好处:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sed 's/^[^ ]* //;s/ .*#//' inputfile

翻译:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s/^[^ ]* //

删除到并包括第一个空格字符的所有内容。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
s/ .*#//

删除第一个(剩余)空格字符中的所有内容,直到行上的最后一个#字符。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/516796

复制
相关文章
使用awk打印文件中的字段和列
Awk 自动将提供给它的输入行划分为字段,一个字段可以定义为一组字符,这些字符通过内部字段分隔符与其他字段分开。 如果你熟悉 Unix/Linux 或者做bash shell 编程,那么你应该知道什么是内部字段分隔符 (IFS) 变量是。Awk 中的默认 IFS 是制表符和空格。 Awk: 遇到输入行时,根据定义的IFS,第一组字符为field one,访问时使用 1,第二组字符是字段二,使用访问 2,第三组字符是字段三,使用访问 为了更好地理解这个 awk 字段编辑,让我们看看下面的例子: Exampl
入门笔记
2022/06/02
10K0
使用 awk 命令统计文本
看到这里,如果小伙伴已经有思路了,那就没必要往下面看了,直接拉到最后,点赞、在看。
程序员小航
2022/06/09
9460
使用 awk 命令统计文本
awk 列求和计算
说明: [分隔符]:一般为“\t”制表符,具体视格式而定 [列数]:统计的列数索引,从1开始
莫斯
2020/09/10
1.5K0
awk命令结构/内置变量/获取文本某行或某列
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。任意一个部分都可以不出现在脚本中,脚本通常是被单引号或双引号中,例如:
yiduwangkai
2019/09/17
2.2K0
awk——强大的文本分析工具
awk是一个强大的文本分析工具,awk把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
TeamsSix
2019/09/24
7000
awk——强大的文本分析工具
vim-调用awk对列求和
潇洒
2023/10/20
4580
vim-调用awk对列求和
awk:强大的文本分析工具
在上一期的文章sed:小工具大用处中小编为大家介绍了sed的使用方法,今天继续为大家介绍另一个非常常用的工具awk。祖国70周年生日在即,为了不给祖国拖后腿,抓紧时间最后再努力学习一把!
SYSU星空
2022/05/05
1.6K0
awk:强大的文本分析工具
linux下文本比对sed与awk使用方法
sed 本身也是一个管线命令,可以分析 standard input ! 而且 sed 还可以将数据进行取代、删除、新增、撷取特定行等等的功能!
小柒吃地瓜
2020/04/21
2.2K0
linux awk获得某一列
因此,如果想要把某一文件的总行数赋值给变量nlines,可以表达为: 1) nlines=(awk 'END{print NR}' filename) 或者 2) nlines=$(awk 'END{print NR}' filename)
用户5760343
2022/05/23
2.9K0
linux awk获得某一列
Linux-文本编辑 awk
awk pic1 图片 awk '{print $9$10}' ar402 09:16:06 ~ $ less -S Data/example.gtf | awk '{print $9$10}' | head gene_id"ENSG00000223972"; gene_id"ENSG00000223972"; gene_id"ENSG00000223972"; gene_id"ENSG00000223972"; gene_id"ENSG00000223972"; gene_id"ENSG00000223
用户10412487
2023/04/03
1.1K0
AWK第二课
1、工作原理 例子: cat /etc/passwd |awk -F ‘:’ ‘BEGIN {print “name”} {print $1} END {print “Joyous”}’ 说明: awk是先执行BEGIN,然后去读文件,一行一行读取,-F指定了每行按照:分割,其中$0标示当前行,$1标示分割第一个区域,$n标示第n个区域。一直到读取完毕,最后执行END 2、正则匹配 awk -F: ‘/^root/{print $1}’ /etc/passwd 说明:搜索root开头的行打印第
苦咖啡
2018/04/28
6690
AWK使用
引子 zcat hnmuseum_21070701.gz|awk -F'[: ]' '{size[$3":"$4]+=$11} END{for(time in size){print time,size[time]*1.1/1024/1024}}'|sort 命令组成分三个部分:BEGIN、BODY、END BEGIN和END需要关键字进行声明,而且是命令中的可选部分,其在命令执行时之后执行一次 BODY部分不需要关键字声明,但是在命令执行时BODY部分会根据输入的行数而执行多次 awk 'BEGIN{p
码缘
2022/09/21
6620
Linux文本分析命令awk的妙用
awk是一个强大的文本分析工具,简单来说awk就是把文件逐行读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理
Java识堂
2019/05/21
1.3K0
awk命令的使用
Ubuntu14.04 目的:想用awk来统计某个文本中单词出现的次数,并以一定的格式输出结构 通常,awk逐行处理文本。awk每接收文件的一行,然后执行相应的命令来处理。 用legal文件来做示例 $ cat /etc/legal The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the indivi
AnRFDev
2021/02/01
5360
awk第二课
使用方法:awk ‘{pattern + action}’ {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数据中查找的内容,而 action 是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。 pattern就是要表示的正则表达式,用斜杠括起来。awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化
苦咖啡
2018/04/28
6450
Linux|Awk 特定模式 过滤文本
有时,在过滤文本时,您希望根据给定条件或使用可匹配的特定模式来指示输入文件中的某些行或字符串行。使用 Awk 执行此操作非常简单,这是 Awk 的强大功能之一,您会发现它很有帮助。
数据科学工厂
2024/03/21
2100
Linux|Awk 特定模式 过滤文本
如何用 awk 删除文件中的重复行【Programming】
了解如何在不排序或更改其顺序的情况下使用awk'!visited $ 0 ++'。
Potato
2019/11/09
8.8K0
如何用 awk 删除文件中的重复行【Programming】
Linux下文本的简单处理(awk和sed)
最近,米老鼠经常需要处理大型文本(500M以上),用R和Python感觉有点太慢,所以就直接使用Linux指令处理了。
生信与临床
2020/08/06
8830
Linux下文本的简单处理(awk和sed)
awk强大的文本文件处理命令
awk是一个非常强大的文本文件处理应用程序,几乎所有 Linux 系统都自带这个程序。awk其实不仅仅是工具软件,还是一种编程语言。它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行具有格式相同的文本文件,awk可能是最方便的工具。使用awk可以打印出自己想要的信息。
BUG弄潮儿
2020/06/12
1.7K0
awk强大的文本文件处理命令
awk - 文本和数据进行处理的编程语言
awk 是一种用于文本和数据处理的编程语言,在数据处理、文本分析等领域应用广泛,以下是关于它的详细介绍:
是山河呀
2025/02/02
1030

相似问题

使用AWK打印列?

40

Awk打印列

40

用&nbsp文件填充其余列的AWK

10

如何使用awk打印文件的第二行

10

AWK -列的打印范围

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文