如何将awk和bash结合使用

时间:2018-08-15 08:40:30

标签: bash shell if-statement awk pipe

我有2个文本文件,分别为newport和panel port,如下所示。我的awk命令根据两个文件的共同行将两个文件合并到port.txt。我也希望在我的目的中描述的新文件中不要使用普通行。我无法结合使用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 #

2 个答案:

答案 0 :(得分:2)

请您尝试以下。

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

答案 1 :(得分:2)

我会做的:

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