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