【发布时间】:2017-04-21 00:07:41
【问题描述】:
我有一个包含多行文本和多列的大文件,我在下面放了一个示例集,该文件来自 Windows 服务器,gawk 正在 DOS 内的 Windows 上运行。
170228 000005 0499 DE(N) SortationHandler.sortationio.Comm Sending Telegram: <ItemEvent><312285164><25243153><EXTERNAL_REDIRECTED><2017-02-28 00:00:05.062+0300><1><><0157368350><previousScans><0><2><position><sorter#0><destinations><2><=TT1-CHU013><=TT1-CHU081><36>
170228 000005 0499 DE(N) SortationHandler.sortationio.Comm Sending Telegram: <ItemEvent><312285166><25243152><INDUCTED><2017-02-28 00:00:05.437+0300><1><><0157370126><previousScans><0><1><position><sorter#0><36><screenedSufficiently>
我希望能够搜索特定字符串,例如<passengerName>,然后打印出 next 列,然后在文件输出中添加 3 或 4 个其他列,我将一直想要开始时的日期和时间。
问题是字段位置可以更改,并且除了日期和时间之外不是静态的。
我尝试了各种 gawk 命令,但我尝试或搜索的任何命令都没有满足我的需求。
gawk -F'[<>]''{for(i=1;i<=NF;i++)if($i=="<passengerName>")print$(i+1)}'
我还想以逗号分隔的文件输出并从列周围删除
我想要的是类似于下面的输出,我可以在其中选择我需要用逗号分隔的列
170228 000005,1FARHANA/MRS,QR118,QR
任何帮助将不胜感激
【问题讨论】:
-
从格式化问题文本开始
-
RomansPerekhrest,给你
-
另外,显示预期结果的外观
-
Pluse-uno 用于提高每个请求的第一次 Q。将来,构建您的样本数据,使其更小。如果您知道如何解决 4 个字段,您应该也可以轻松解决 14 或 44 或.....对吗? ;-) 。鉴于您在下面的错误消息,还包括
uname -srv && awk --version的输出,祝您好运。 -
@Fabby 的重点是为您创建一个 Minimal 示例。为了让人们有兴趣帮助您,请向我们展示代表您的问题的 4 或 5 个字段的输入,而不是 50 个字段或您发布的数量。请参阅How to Ask,尤其是有关创建minimal reproducible example 的部分。