替换最后一列数据中的数字

时间:2014-03-21 23:31:10

标签: unix

快速提问,对于懂语法的人来说应该相当简单,问题就在于标题所说的内容。如果我以此为例:

    Something1 hi bye 12
    Cars32 hello bye 23
    Cars32 hello bye 65
    Cars32 hello bye 34
    word hello bye 42
    Cars32 hello bye 32
    Cars32 hello bye 75
    Cars32 hello bye 12
    Cars32 hello bye 42

我希望将最后一列中所有出现的12替换为3,将所有42替换为5.我将如何进行此操作。感谢。

2 个答案:

答案 0 :(得分:2)

以下是一种使用awk的方法:

#!/bin/sh
awk '\
{
  val = $4;
  if(val == 12) {
    val = 3;
  }else if(val == 42){
    val = 5;
  }
  print $1, $2, $3, val;
}'

如果文本文件保存为example.txt,请将此awk脚本保存为exampleScript(并chmod 777以便它可执行),然后将其作为

  

cat example.txt | ./exampleScript

输出:

Something1 hi bye 3
Cars32 hello bye 23
Cars32 hello bye 65
Cars32 hello bye 34
word hello bye 5
Cars32 hello bye 32
Cars32 hello bye 75
Cars32 hello bye 3
Cars32 hello bye 5

答案 1 :(得分:2)

以下是awk

的使用方法
$ awk '$NF==12{$NF=3}$NF==42{$NF=5}1' file
Something1 hi bye 3
Cars32 hello bye 23
Cars32 hello bye 65
Cars32 hello bye 34
word hello bye 5
Cars32 hello bye 32
Cars32 hello bye 75
Cars32 hello bye 3
Cars32 hello bye 5