awk - 使用 cut 过滤固定宽度的文件
问题描述
假设我有一个像这样的文件:
1 10 20 30 40 50
==================================================
foofoofoo1111111111bblah moreblahblblahblah
foofoofoo2 foofoo stuffhere
=================================================
我想返回位置 11-20 和 31-40 为空白的所有行。我可以使用 cut 识别它们:
cut -b 11-20,31-40 < source.txt
这将返回这些位置的字符。
====================
111111111bmoreblahbl
====================
第二行(忽略 === 的行)全是空白。我想将这些字符为空白/空格的整行(所以这里的第二行)重定向到一个新文件。我不知道如何结合 cut 和 grep 来做到这一点。当然这必须可能,但我无法解决。
解决方案
像这样的东西?使用 awk:
$ awk 'substr($0,11,10) substr($0,31,10)~/^ *$/' file
foofoofoo2 foofoo stuffhere
解释:
$ awk '
substr($0,11,10) substr($0,31,10)~/^ *$/ # positions 11-20 and 31-40 are all space
' file
使用grep
:
$ grep "^.\{10\} \{10\}.\{10\} \{10\}" file
从开始 ( ^
) 开始,有 10 个任意字符 ( .\{10\}
),然后是 10 个空格 ( \{10\}
) 并重复。
编辑:
的较短版本grep
:
$ grep "^\(.\{10\} \{10\}\)\{2\}" file
推荐阅读
- java - 有没有办法在 Android 中创建一个泛型类的片段?
- c# - Aws lambda 代理 Swagger 模板集成
- python - 如何在 Google Directory API 中正确使用“下一页令牌”
- list - Prolog没有以我想要/需要的方式显示输出
- google-bigquery - 带有目标表 vrs 插入语句的 bq 查询
- c# - .Net Core Connected Services - 共享类型
- java - 为什么两个 LocalDate 变量之间的比较不起作用?
- c# - 如何使用反序列化对象 c#
- c - 如何显示C中输入的总和和计算
- charts - 如何在颤动中制作动态图表?