Columns

如何為所有行剪切一個特定列中的最後 5 個字元串

  • September 27, 2018

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

但我想維護我原來的表。有什麼建議嗎?

簡短**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 個字元
  • &- 指向整個匹配序列

引用自:https://unix.stackexchange.com/questions/397534