首页 > 解决方案 > 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。

标签: bashawk

解决方案


你的字段分隔符是错误的。

|作为分隔符,这是可以的,-F'|' 但是在添加字符时,它会将|视为 or 并且不会按预期工作。试试-F'[|]@~'。它将给出以下分隔符:|@~

-F'ab|zf'将给出abzf作为分隔符。


推荐阅读