【问题标题】:How to combine awk and if in bash如何在 bash 中结合 awk 和 if
【发布时间】:2018-08-15 08:40:30
【问题描述】:

我有 2 个名为 newport 和面板端口的文本文件,如下所示。我的 awk 命令根据它们的共同行将两个文件组合到 port.txt。我也希望在 my purpose 中描述的新文件中没有常用行。我无法将 awk 和 if 或其他 |awk 命令结合使用。

awk -F' ' 'FNR==NR{a[$1]=$2; next} {print $1,a[$1]}' newport.txt panelport.txt > port.txt

新港

LTECD11L 444

面板端口

ENODEB1513L #
ENODEB1521L #
ENODEB1522L #
ENODEB1532L #
ENODEB1533L #
LTECD11L #
LTECD12L #
LTECD14L #
L650112L #
LTEG211L_1 #
LTEG212L_1 #
NodeB1213L #
NodeB1214L #
ENODEB1612L #
ENODEB1614L #
ENODEB1617L #
NodeB1113L #
NodeB1114L #
BB663011L #
BB663012L #

端口

ENODEB1513L 
ENODEB1521L 
ENODEB1522L 
ENODEB1532L 
ENODEB1533L 
LTECD11L 444
LTECD12L 
LTECD14L 
L650112L 
LTEG211L_1 
LTEG212L_1 
NodeB1213L 
NodeB1214L 
ENODEB1612L 
ENODEB1614L 
ENODEB1617L 
NodeB1113L 
NodeB1114L 
BB663011L 
BB663012L 

我的目的

ENODEB1513L #
ENODEB1521L #
ENODEB1522L #
ENODEB1532L #
ENODEB1533L #
LTECD11L 444
LTECD12L #
LTECD14L #
L650112L #
LTEG211L_1 #
LTEG212L_1 #
NodeB1213L #
NodeB1214L #
ENODEB1612L #
ENODEB1614L #
ENODEB1617L #
NodeB1113L #
NodeB1114L #
BB663011L #
BB663012L #

【问题讨论】:

  • 很高兴您已经为解决这个问题付出了努力,也请尝试搜索论坛,您可能会在这里获得更多帮助。也给它一些时间,然后尝试选择任何答案作为正确答案以完成线程。

标签: bash shell if-statement awk pipe


【解决方案1】:

请您尝试关注一下。

awk 'FNR==NR{a[$1]=$0;next} {$0=($1 in a?a[$1]:$1" #")} 1' newport  panelport

如果您不想在输出中使用 #,那么以下操作可能会有所帮助。

awk 'FNR==NR{a[$1]=$0;next} {$0=($1 in a?a[$1]:$1)} 1' newport  panelport

【讨论】:

  • @SelimTurkoglu,很高兴它对你有用。给它某个时间,当我们有多个答案时,然后选择其中任何一个作为正确的答案,请参阅此链接一次stackoverflow.com/help/someone-answers
  • `#` 连接部分不好。
  • @Kent,我认为 OP 需要它,我现在也将添加没有它的解决方案。
【解决方案2】:

我愿意:

awk 'FNR==NR{a[$1]=$0;next} $1 in a{$0=a[$1]}1' newport  panelport

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 2022-01-21
    • 2015-01-21
    • 2014-09-12
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多