【问题标题】:Use Perl to process a text file based on the first field of each line使用 Perl 根据每行的第一个字段处理文本文件
【发布时间】:2018-03-22 01:14:35
【问题描述】:

我正在尝试编写一个读取以下格式文件的 Perl 脚本:

ATPG     TCD             tcd/T1, xxx/tcd/T2    
ATPG     INSTANCE        inst1/I1, xxx/inst2/I2, inst3/I3
ATPG     PATTERN         pat1/P1, pat2/P2
SIM      BLACKBOX        bb1/B1, bb2/B2

对于第一个字段中包含ATPG 的每一行,它应该打印到输出文件。例如:

// TCD

read_core_description tcd/T1
read_core_description xxx/tcd/T2

// INSTANCE
add_core_instance  -instance inst1/I1  
add_core_instance  -instance xxx/inst2/I2   
add_core_instance  -instance inst3/I3

//PATTERN 
read_patterns pat1/P1  
read_patterns pat2/P2

SIM 开头的其他行不会影响输出文件。我该怎么做?

【问题讨论】:

  • 请展示你拥有的东西。如果您不能编写像这样基本的代码,那么 SO 可能不是最好的提问地方。如果是这样,我建议先学习语言基础知识;你可以在几天内学到足够的知识来解决这样的问题。最重要的是,在这里简单地询问代码是题外话。
  • @zdim:谢谢你的通知,我会当作经验......
  • @Hanh 感谢您的说明和署名。这里的问题似乎是“migrated”。至于我的评论——人们通常期望关于你的代码的非常具体的问题。因此,您通常会简要描述您正在尝试做什么,显示您的代码及其输入和输出(以及可能的错误),并说明或解释看起来错误的地方和原因。否则问题被视为离题。阅读以How to ask 开头的简短有用的帮助页面。对于未来,正如你所说:)

标签: scripting perl


【解决方案1】:

在单行中,描述被缩短

perl -anE'
    BEGIN { %d = (TCD => "read", INSTANCE => "add", PATTERN => "patterns") 
    if (shift@F eq "ATPG") { $n=shift@F; say "// $n"; say "$d{$n} $_" for @F }
' input.txt

@F 是通过将每一行拆分为空格来获得的,因此由-a 提供。

我建议阅读该语言的核心描述并自己尝试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 2019-10-19
    • 1970-01-01
    • 2017-01-10
    • 2011-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多