Grep/sed/awk の組み合わせを使用して、ファイルの 1 行からパターンを削除します。パターンは別の列です。

Grep/sed/awk の組み合わせを使用して、ファイルの 1 行からパターンを削除します。パターンは別の列です。

大きなファイルには2つの列があり(または2つのファイルに分割できます)、州/地域の列から重複した都市名を削除する必要があります。

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

最初の列を変数とパターンの一致にし、2番目の列から削除できますか?

ベストアンサー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)$2から$1の検索回数
  • 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

おすすめ記事