我发现了比较和排序文件的类似主题,但没有人符合我的需求。试着解释一下例子:
cat file1
D value1 value2 value[n]
Z value1 value2 value[n]
H value1 value2 value[n]
A value1 value2 value[n]
C value1 value2 value[n]
cat file2
C value11 value22 value[n]
D value11 value22 value[n]
A value11 value22 value[n]
欲望输出:
猫输出
D value11 value22 value[n]
Z ------- ------- -------[n]
H ------- ------- -------[n]
A value11 value22 value[n]
C value11 value22 value[n]
因此,根据第一列file2与file1进行比较 - 如果匹配打印整行file2,但按照file1进行排序。如果没有匹配打印只是第一列后面的点(-------)。两个文件的列数不同。
任何想法或帮助都会非常感激。
答案 0 :(得分:2)
如果没有匹配打印点后面的第一列(-------)。
因此我认为[n]
也应该被-
替换。
然后这个:
awk 'NR==FNR{a[$1]++;next}!a[$1]{for(i=2;i<=NF;i++)gsub(/./,"-",$i)}7' f2 f1
给出:
D value1 value2 value[n]
Z ------ ------ --------
H ------ ------ --------
A value1 value2 value[n]
C value1 value2 value[n]
awk 'NR==FNR{a[$1]=$0;next}{if(a[$1])$0=a[$1];else for(i=2;i<=NF;i++)gsub(/./,"-",$i)}7' f2 f1
给出:
D value11 value22 value[n]
Z ------ ------ --------
H ------ ------ --------
A value11 value22 value[n]
C value11 value22 value[n]
答案 1 :(得分:2)
你可以使用这个awk:
awk 'FNR==NR{a[$1]; next}
{
if (a[$1])
$0=a[$1]
else {
s=$1
gsub(/[^[:blank:]]/, "-")
$1=s
$NF=$NF "[n]"
} 1' file2 file1
D value11 value22 value[n]
Z ------ ------ --------[n]
H ------ ------ --------[n]
A value11 value22 value[n]
C value11 value22 value[n]