如何仅在第一列中的单词末尾添加特定字符?

时间:2016-05-21 13:42:20

标签: awk sed

我需要以这种方式操作文件:

档案输入 -

1 34566 34765 

2 45678 45789

3 34567 34799

X 67895 66900

Y 34567 34890

归档

1_M 34566 34765

2_M 45678 45789

3_M 34567 34799

X_M 67895 66900

Y_M 34567 34890

谢谢,

1 个答案:

答案 0 :(得分:2)

$ cat data 
1 34566 34765 
2 45678 45789
3 34567 34799
X 67895 66900
Y 34567 34890

使用awk

$ awk '{print $1 "_M",$2,$3}' data 
1_M 34566 34765
2_M 45678 45789
3_M 34567 34799
X_M 67895 66900
Y_M 34567 34890

使用sed

$ sed 's/^\S*/&_M/' data 
1_M 34566 34765 
2_M 45678 45789
3_M 34567 34799
X_M 67895 66900
Y_M 34567 34890

说明:

  1. awk '{print $1 "_M",$2,$3}' data打印出第1个字段 与" _M"连接然后是第二场,然后是第三场。 请注意awk中的连接运算符是一个空格。
  2. 至于sed命令:

    1. sed 's/^\S*/&_M/' data运行替换(s命令) 替代
    2. ^\S* => \s表示空白字符,\S表示非空格字符 空格字符*表示0或更多。 ^是一个锚点 确保从行开始匹配。
    3. sed中的
    4. &表示匹配的字符串
    5. 因此,简而言之,我们将^\S*替换为^\S*_M