繁体   English   中英

如何在awash中组合awk和if

[英]How to combine awk and if in bash

我有2个文本文件,名为newport,面板端口如下所示。 我的awk命令根据它们的公共行将两个文件组合到port.txt。 我也想要在mypurpose中描述的新文件中不常见的行。 我无法组合awk和if或另一个| awk命令。

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

纽波特

LTECD11L 444

的PanelPort

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 #

你可以尝试一下吗?

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

我会做:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM