Bash 用COLUM连接两个变量并用缺省值填充空白行

Bash 用COLUM连接两个变量并用缺省值填充空白行,bash,awk,Bash,Awk,我想通过逐列加入两个变量,也用缺省值填充空白行。 echo var1 location|Serial 001|0 003|1 007|0 009|1 echo var2 name|location|type|built name1|001|type1|2009 name2|003|type4|2012 name3|007|type1|2010 name4|009|type2|2015 name5|002|type0|2016 我设法打印了以下内容: paste <(echo "$va

我想通过逐列加入两个变量,也用缺省值填充空白行。
echo var1
location|Serial
001|0
003|1
007|0
009|1

echo var2
name|location|type|built
name1|001|type1|2009
name2|003|type4|2012
name3|007|type1|2010
name4|009|type2|2015
name5|002|type0|2016
我设法打印了以下内容:

 paste <(echo "$var2"|awk 'BEGIN{print "name","location","type","built","serial"} NR>1') <(echo "$var1"|awk -F'|' 'NR>1{$1=$1;print FS $2}')
name location type built serial |0
name1|001|type1|2009    |1
name2|003|type4|2012    |0
name3|007|type1|2010    |1
name4|009|type2|2015
name5|002|type0|2016
试试这个-

 awk 'BEGIN{FS=OFS="|"} NR==FNR{a[$1]=$2;next} {print (a[$2]!=""?$0 OFS a[$2] : $0 OFS "NA")}' <(echo "$var1") <(echo "$var2")
name|location|type|built|Serial
name1|001|type1|2009|0
name2|003|type4|2012|1
name3|007|type1|2010|0
name4|009|type2|2015|1
name5|002|type0|2016|NA
awk'BEGIN{FS=OFS=“|”}NR==FNR{a[$1]=2;next}{print(a[$2]!=”?$0 of s a[$2]:$0 of s“NA”)}试试这个-

 awk 'BEGIN{FS=OFS="|"} NR==FNR{a[$1]=$2;next} {print (a[$2]!=""?$0 OFS a[$2] : $0 OFS "NA")}' <(echo "$var1") <(echo "$var2")
name|location|type|built|Serial
name1|001|type1|2009|0
name2|003|type4|2012|1
name3|007|type1|2010|0
name4|009|type2|2015|1
name5|002|type0|2016|NA
awk'BEGIN{FS=OFS=“|”}NR==FNR{a[$1]=2;next}{print(a[$2]!=”?$0 of a[$2]:$0 of s“NA”)}
输出

$ awk 'BEGIN{FS=OFS="|"}FNR==NR{a[$1]=$2;next}{print $0,($2 in a)?a[$2]:"NA"}' <(echo "$var1") <(echo "$var2")
name|location|type|built|Serial
name1|001|type1|2009|0
name2|003|type4|2012|1
name3|007|type1|2010|0
name4|009|type2|2015|1
name5|002|type0|2016|NA
$awk'BEGIN{FS=OFS=“|”}FNR==NR{a[$1]=$2;next}{print$0,(a中的$2)?a[$2]:“NA”}
输出

$ awk 'BEGIN{FS=OFS="|"}FNR==NR{a[$1]=$2;next}{print $0,($2 in a)?a[$2]:"NA"}' <(echo "$var1") <(echo "$var2")
name|location|type|built|Serial
name1|001|type1|2009|0
name2|003|type4|2012|1
name3|007|type1|2010|0
name4|009|type2|2015|1
name5|002|type0|2016|NA
$awk'BEGIN{FS=OFS=“|”}FNR==NR{a[$1]=2;next}{print$0,(a中的$2)?a[$2]:“NA”}无需awk:

paste -d'|' <(<<<"$var2") <(<<<"$var1") | cut --complement -d'|' -f5
你到底在问什么? 您希望根据var1中的字段1和var2中的字段2来连接输入。在这种情况下,我建议使用coreutils中的
join
,它直接支持这一点,例如:

join -t '|' -11 -22 -o'2.1 2.2 2.3 2.4 1.2' -a2 -eNA <(<<<"$var1") <(<<<"$var2")
无需awk:

paste -d'|' <(<<<"$var2") <(<<<"$var1") | cut --complement -d'|' -f5
你到底在问什么? 您希望根据var1中的字段1和var2中的字段2来连接输入。在这种情况下,我建议使用coreutils中的
join
,它直接支持这一点,例如:

join -t '|' -11 -22 -o'2.1 2.2 2.3 2.4 1.2' -a2 -eNA <(<<<"$var1") <(<<<"$var2")

您是否试图分别在变量的第一个字段和第二个字段中加入变量?在这种情况下,我建议使用
join
。请看,您是否试图分别在变量的第一个字段和第二个字段中加入变量?在这种情况下,我建议使用
join
。看见