すべての行の特定の列で最後の5つの文字列を切り捨てる方法

すべての行の特定の列で最後の5つの文字列を切り捨てる方法

複数の列と行を持つファイルがあり、3番目の列の最後の5つの文字列を切り取り、追加の列に印刷する必要があります。たとえば、

1 info1 AAAAAAAAAAA
2 info23 TTTTTTTTTT
3 ingo45  ATATATATATATAT
4 info67 GGGYYYYUUUUUUU

私の結果は次のとおりです

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

次の方法でのみ3番目の列を切り取ることができます。

cat input_file | cut -f3 | grep -o '.\{5\}$' > output_file

しかし、元のテーブルを維持したいと思います。どんな提案がありますか?

ベストアンサー1

短いAWK方法:

awk '{ $(NF+1)=substr($NF, length($NF)-4) }1' input-file
  • $NF- 最後のフィールド値

  • $(NF+1)- 最後のフィールドになります(初期の最後のフィールド以降$NF)。

  • length($NF)-4- 開始位置/オフセットのインポート5- キャラクタースライシング


出力:

1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45 ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

----------

文字列を置き換えることで同じ効果が得られます。

awk '{ sub(/.{5}$/, "& &") }1' input-file
  • /.{5}$/- レコードの終わりの最後の5文字と一致します。

  • &- 一致するシーケンス全体を指します。

おすすめ記事