使用 awk 或 sed 在列中添加字母和字符?

使用 awk 或 sed 在列中添加字母和字符?

我有一个如下所示的文件:

A3 124.406526 8.281803
A3' 125.000684 8.389677
K4 123.072842 8.166373
K4' 120.092553 8.269080

我想在第一列中添加字符,文件应如下所示:

A3N-H 124.406526 8.281803
A3'N-H 125.000684 8.389677
K4N-H 123.072842 8.166373
K4'N-H 120.092553 8.269080

我怎样才能通过 awk 或 sed 以简单的方式做到这一点?

答案1

sed

sed -E 's/^([^[:blank:]]+)/\1N-H/' file.txt
  • ([^[:blank:]]+)匹配第一个字段 ( ^),并仅放入捕获的组中

  • 在替换中,N-H附加到第一个字段,\1N-H

awk

awk '{sub("$", "N-H", $1)}; 1' file.txt 
  • sub("$", "N-H", $1)将第一个字段 ( ) 的末尾替换$N-H,这必然意味着就地追加操作

  • 1只是一个占位符,true以便打印(修改的)记录

例子:

% cat file.txt                               
A3 124.406526 8.281803
A3' 125.000684 8.389677
K4 123.072842 8.166373
K4' 120.092553 8.269080

% sed -E 's/^([^[:blank:]]+)/\1N-H/' file.txt
A3N-H 124.406526 8.281803
A3'N-H 125.000684 8.389677
K4N-H 123.072842 8.166373
K4'N-H 120.092553 8.269080

% awk '{sub("$", "N-H", $1)}; 1' file.txt    
A3N-H 124.406526 8.281803
A3'N-H 125.000684 8.389677
K4N-H 123.072842 8.166373
K4'N-H 120.092553 8.269080

答案2

简而言之,一句话:

awk '$1=$1"N-H"'

相关内容