如何在bash中组合awk和if

如何在bash中组合awk和if,bash,shell,if-statement,awk,pipe,Bash,Shell,If Statement,Awk,Pipe,我有两个文本文件名为newport和panel port,如下所示。我的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 ENOD

我有两个文本文件名为newport和panel port,如下所示。我的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 #

你能试试下面的吗

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

@塞利姆特科格鲁,很高兴它对你有用。找个时间给它,当我们有多个答案时,然后选择其中一个作为正确的答案。查看此链接,一旦`#`连接部分不好。@Kent,我认为OP需要它,我现在也会添加没有它的解决方案。很好,你已经展示了你解决此问题的努力,也尝试搜索论坛。你可能会在这里获得更多帮助。也给它一些时间,然后尝试选择任何一个答案作为正确的答案,以完成线程。
awk 'FNR==NR{a[$1]=$0;next} $1 in a{$0=a[$1]}1' newport  panelport