bash - awk 没有从我的数据中显示正确的总字段/列数
问题描述
我的示例数据如下,使用显示:(
cat -v sampel.txt
也显示隐藏的特殊字符)
如果我将我的sampel.txt转储到 excel 中,使用 delimiter |
,总字段/列是 75。但是当我尝试计算总字段/列时,它只显示 12 个字段:
awk -F "|@~" '{print NF}' sampel.txt
12
我需要获取第 13 个字段的值=53489958
,但是当我输入以下内容时:
awk -F "|@~" '{print $13}' sampel.txt
它没有显示任何东西。
仅供参考,我使用 IBM Aix Shell。
知道如何解决吗?是不是因为在字段 12th 和 13th 之间,有额外的特殊(隐藏)分隔符^@
,意味着在我的样本数据中有多个分隔符(从字段 1 到 12,分隔符是|@~
,然后从字段 13 有额外的分隔符^@
)。
那么,为了显示第 13 个字段的值,我应该如何在 awk 过滤中键入正则表达式=53489958
?
我应该为正则表达式键入什么,以便我的 awk 中显示的总字段/列是 75 而不是 12 个字段/列?
这是我的原始数据,复制并粘贴:
14027421900-23|@~14027421900|@~ 0000000000000000000005002.|@~ |@~0|@~ |@~ |@~ |@~ |@~ |@~ |@~ |@~53489958|@~ |@~ |@~0 |@~ |@~ |@~ |@~ |@~ |@~2018-06-01|@~305111010001|@~1000|@~7212|@~4|@~11|@~ 6 |@〜|@〜|@〜3 |@〜000000001847600.00|@~~ 00000000000000000000,00|@~~ 0000000000000000000000,00,00|@~~ 0000000000000000000000000000,0000|@~~ 000000| 000000000000000000,00|@~~ 000000000000000.00|@~ 000000000000000000,00,00|@~ 000000000000000000000000,00|@〜00000000000000000000000000000000,00|@0000000000000000| |@~2082-[20180603191519244]加载 Induk 全部 12THR 18.xls|@~P|@~
|@~2018-06-04|@~0 |@~2018-08-10|@~ |@~ |@~04062018|@~017318|@~017318|@~ |@~ |@~ |@~ |@~80079|@~022|@~ |@~0 |@~ |@~ 00000000000000000000000000000029157777。
解决方案
你的字段分隔符是错误的。
仅|
作为分隔符,这是可以的,-F'|'
但是在添加字符时,它会将|
视为 or 并且不会按预期工作。试试-F'[|]@~'
。它将给出以下分隔符:|@~
-F'ab|zf'
将给出ab
或zf
作为分隔符。
推荐阅读
- java - 当他们尝试在 Spring Boot 中访问 web 应用程序时如何记录未经授权的用户 (401)
- php - Laravel 6 All api 给 401 未授权
- php - 合并两个单独的 phpunit 代码覆盖率报告以形成单个报告
- java - 我的 web.xml 的尾随部分中不允许有内容
- javascript - SAPUI5:如何在 XML 中设置父可见性
- meteor - 如何在流星中使用 JWT 令牌对用户进行身份验证并在 Meteor.user() 中获取用户的详细信息?
- python - Cloudflare 是否允许在 API Python 中更新 DNS 记录?
- java - 写入文件时的未知来源
- php - 在 VS Code 中,我可以自动完成 PHP 的函数参数吗?
- python - 将 3d numpy 数组转换为数据框