使用 Grep/sed/awk 组合从文件中的一行中删除模式,模式是另一列

使用 Grep/sed/awk 组合从文件中的一行中删除模式,模式是另一列

我在一个大文件中有两列(或者可以分开为两个文件),我需要删除州/地区列中重复的城市名称。

los angeles      los angeles ca, usa, west
new york         new york ny, usa, east
vancouver        vancouver bc can, west
...

我可以以某种方式将第一列作为变量和模式匹配并从第二列中删除吗?

答案1

使用awk, 和输入文件

los angeles     los angeles ca, usa, west
new york        new york ny, usa, east
vancouver       vancouver bc can, west
paris   france paris, europe
berlin  germany berlin
mardrid ola, spain

其中列正确地用制表符分隔。

awk -F\\t '{if (i=index($2,$1)) $2=substr($2,0,i-1) substr($2,i+length($1)) ; print }' u

在哪里

  • -F\\t使用制表符作为分隔符
  • i=index($2,$1)$1 在 $2 中的搜索次数
  • if ( )如果发现..
  • $2=substr($2,0,i-1) substr($2,i+length($1))将 $2 替换为删除 $1 的子字符串(假设仅出现一次 $1)
  • print打印结果

结果

los angeles  ca, usa, west
new york  ny, usa, east
vancouver  bc can, west
paris france , europe
berlin germany
mardrid ola, spain

相关内容