根据具有特殊条件的第一列对两个文件进行排序



我发现了与比较和排序文件类似的主题,但没有一个符合我的需求。尝试以示例解释:

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]

相关内容

  • 没有找到相关文章