如何剪切所有行的某一特定列中的最后 5 个字符串

如何剪切所有行的某一特定列中的最后 5 个字符串

我有一个包含多列和行的文件,我需要剪切第三列的最后 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

我只能通过以下方式剪切第三列:

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 个字符

  • &- 指向整个匹配序列

答案2

使用 sed&替换字符串的两个实例:

$ sed 's/.\{5\}$/& &/' file
1 info1 AAAAAAAAAAA AAAAA
2 info23 TTTTTTTTTT TTTTT
3 ingo45  ATATATATATATAT TATAT
4 info67 GGGYYYYUUUUUUU UUUUU

相关内容