从另一个文本字符串中减去一个文本字符串,留下唯一的字符,也许使用 awk

从另一个文本字符串中减去一个文本字符串,留下唯一的字符,也许使用 awk

有没有办法从包含文本的另一列中减去包含文本的数据列并获得包含唯一字符的第三列,例如使用 awk 例如。

输入

ab   a
cd   d    
efg  ef

期望的输出:

ab   a   b
cd   d   c
efg  ef  g

答案1

是的,awk是一个合适的选择:

awk 'NF{t=$1;gsub("["$2"]","",t);print$0,t}' input

如果第二个字段可能包含正则表达式字符类中具有特殊含义的字符,则必须对这些字符进行转义。在 POSIX 中解决这个问题awk很长,所以我只发布 GNUawk替代方案:

gawk 'NF{print$0,gensub("["gensub(/([\[\]^-])/,"\\\\\\1","g",$2)"]","","g",$1)}' input

答案2

Manatworks 的解决方案当然没问题。这只是一个纯粹的 bash 替代方案。

while read line
do
  in=${line/ */}
  pat=${line/* /}
  echo $line ${in/$pat}
done < aba.dat

ab a b
cd d c
efg ef g
  • inreplace ( /) from $line 中,什么是空白,后跟一些东西——不是正则表达式,而是通配符风格。
  • 与之pat相反:删除空白之前的内容。删除,因为${src/pattern/replacement}的替换部分是空白的。
  • ${in/$pat} 将patin替换in为空。$与第一个变量/部分 (in) 相比,pat var 需要标记为变量。

相关内容