【发布时间】:2020-03-30 08:11:03
【问题描述】:
我的示例数据如下所示,使用:
cat -v sampel.txt(同时显示隐藏的特殊字符)
如果我将 sampel.txt 转储到 excel,使用分隔符 |,则总字段/列
是 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 到是附加分隔符^@)。
那么我应该如何在 awk 过滤中输入正则表达式,以显示第 13 个字段的值 =53489958?
我应该为正则表达式输入什么,这样我的 awk 中显示的总字段/列是 75 而不是 12 个字段/列?
这是我的原始数据,复制粘贴:
14027421900-23|@~14027421900|@~ 000000000000000000000000000000000005002.|@~ |@~0|@~ |@~ |@~ |@~ |@~ |@~ |@~ |@~53489958|@~ |@~ |@~0 |@~ |@~ |@~ |@~ |@~ |@~2018-06-01|@~305111010001|@~1000|@~7212|@~4|@~11|@~6|@~ |@~ |@~3|@~ 000000001847600.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00 | @~ 000000000000000.00|@~ 000000000000000.00|@~ 000000000000000.00|@~ |@~ |@~617598679|@~ |@~379311|@~1 |@~BL |@~2082-[2018416031915192 全部载入xls|@~P|@~
|@~2018-06-04|@~0 |@~2018-08-10|@~ |@~ |@~04062018|@~017318|@~017318|@~ |@~ |@~ |@~ |@~80079|@~022|@~ |@~0 |@~ |@~ 00000000000000000000000000000029157777。
【问题讨论】:
-
作为图像的样本数据不会帮助丢失。将数据客栈剪切并粘贴到您的帖子中。
-
欢迎来到 SO,感谢您为解决自己的问题所做的努力。请添加带有代码标签的文本格式示例,然后让我们知道。
-
@mas dani 您需要使用单个分隔符而不是多个分隔符,我会说,使用
sed将这些分隔符更改为一个分隔符,例如|或您认为合适的分隔符,然后使用awk.否则将awk -F<delimiter1>传递给awk -F<delimiter2>以获取/设置您想要的值。 -
@masdani - 它可能是也可能不是问题,但您文件中的那些
^@s 可能是 NUL 字符。根据 POSIX,文本文件不能包含 NUL 字符(许多工具在内部使用 C 字符串来存储它们读取的输入,而 C 字符串是一组以 NUL 结尾的字符,因此其中一个字符不能为 NUL)并且 awk 是处理文本文件的工具。因此,如果在非文本文件上运行 awk 不能按您希望的那样工作,您不应该感到震惊。如果您拥有或可以获得 GNU awk,它将能够处理包含 NUL 的输入文件。否则,您必须使用 Excel 或类似工具将其删除。 -
@EdMorton 我的立场是正确的,我猜失去了一点联系