我发现了与比较和排序文件类似的主题,但没有一个符合我的需求。尝试以示例解释:
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]
因此,根据第一列文件2与文件1进行比较 - 如果匹配,则打印整行文件2,但继续根据文件1进行排序。如果没有匹配项,则只打印点 (-------) 后面的第一列。两个文件的列数不同。
任何想法或帮助将不胜感激。
如果没有匹配项,则仅打印点 (-------) 后面的第一列。
因此,我认为[n]
也应该替换为-
s。
那么这个:
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]
你可以使用这个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]