【问题标题】:Find a text within a pattern using awk in UNIX在 UNIX 中使用 awk 在模式中查找文本
【发布时间】:2018-02-05 11:20:25
【问题描述】:

我有许多文本文件,第一行在单个文件中采用以下格式。

/*tablename-Employee*/ 
/*tablename-Department*/
/*tablename-Orders*/

我想使用 awk 从每个单独的文件中获取 Employee、Department 和 Orders。

我试过了,但没有看到任何输出。

 awk '/^[\/]*tablename: / {print $1}' employee_file.sql
 awk '/^[\/]*tablename: / {print $1}' department_file.sql
 awk '/^[\/]*tablename: / {print $1}' order_file.sql

单个命令的预期输出。

Employee
Department
Orders

【问题讨论】:

    标签: bash shell unix awk pattern-matching


    【解决方案1】:

    你可以使用awk:

    awk -F '[-*]' 'NR == 1{print $3}' file1
    Employee
    
    awk -F '[-*]' 'NR == 1{print $3}' file2
    Department
    
    awk -F '[-*]' 'NR == 1{print $3}' file3
    Orders
    

    【讨论】:

    • 我有 3 个不同的文件,其中包含第一行的模式 /*tablename-
    • 打印后添加退出
    • @anubhava awk 逻辑工作正常,但输出下方有很多空格。
    • 查看更新,NR == 1 将使其仅在第一行运行。
    • 为了提高效率,请在print 之后添加exit,就像@NahuelFouilleul 建议的那样,而不是添加NR==1
    猜你喜欢
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 2017-12-06
    • 2012-07-24
    相关资源
    最近更新 更多