awk - 使用 cut 过滤固定宽度的文件

标签 awk grep cut

假设我有一个像这样的文件:

1        10        20        30        40       50
==================================================
foofoofoo1111111111bblah      moreblahblblahblah
foofoofoo2          foofoo              stuffhere

================================================== ==

我想返回位置 11-20 和 31-40 为空白的所有行。我可以使用剪切来识别它们:

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

关于awk - 使用 cut 过滤固定宽度的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54913120/

相关文章:

linux - 如何剪切CSV文件

awk - 使用 awk,提取文本文件中列中两个字符串之间的第一个和最后一个数字,然后区分它们?

Linux:如何根据 grep 的结果创建 zip

awk - 如果模式匹配,则删除该行中的换行符

linux - 从配置文件中删除 ip 地址

python - 从文件中提取特定的行集

bash - 在 bash 中提取多个字符串并合并为 .csv

regex - 负向后看中的 grep 反斜杠

bash - 在 Unix 中拆分文本

terminal - 使用剪切命令