-2

我想打乱数据的第 2 列和第 4 列。

[1234567890] -> [8728125870]

输入:

 First_name,id,second_name,phone_number
 ram,232,prakash,96
 hari,123,pallavi,98
 anurag,456,aakash,13

预期输出:

 First_name,id,second_name,phone_number
 ram,727,prakash,82
 hari,872,pallavi,78
 anurag,812,aakash,87
4

2 回答 2

0
 BEGIN { FS=OFS="," }
    {
      cmd = "echo '" $0 "' | tr '1234567890' '8728125870'"
      new = ( (cmd | getline line) > 0 ? line : $1 )
      close(cmd)
      split(new,tmp)
      for (i in tmp) {
          if (i ~ /^(2|4)$/) {
              $i = tmp[i]
                     }
     }
      print
   }

将上述代码保存在 test.awk 文件中并使用 -> awk -f test.awk datanew.csv 执行

于 2017-09-04T05:46:39.053 回答
0

步骤1:

生成一个随机数用于替换。这是通过类似于$(($RANDOM * 32768 + $RANDOM)); 如果您需要更多详细信息,请告诉我。

第2步:

用于tr将所有数字替换为其“大写”版本,并将它们替换为您需要的数字。因此,对于您的示例,要仅替换 1、2 和 3,您将运行:

cat inputfile | tr '1' '!' | tr '2' '@' | tr '3' '#' | tr '4' '$' | tr '5' '%' | tr '6' '^' | tr '7' '&' | tr '9' '(' | tr '!' '8' | tr '@' '7' | tr '#' '2' | tr '$' '8' | tr '%' '1' | tr '^' '2' | tr '&' '5' | tr '(' '7'

注意:要获得所需的效果,您需要扩展上面的命令才能使其工作。多次运行 insted 会产生错误的结果。

上述命令的输出:

First_name,id,second_name,phone_number
 ram,727,prakash,96
 hari,872,pallavi,98
 anurag,456,aakash,87

另外:请注意您的“预期”输出如何不正确。第一个数字应该是 727,而不是 728。

于 2017-08-23T14:19:55.777 回答