unix中的数据函数
Data functions in unix
我想打乱数据的第 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
第 1 步:
生成一个随机数用于替换。这是用类似于 $(($RANDOM * 32768 + $RANDOM))
的东西完成的;如果您需要更多详细信息,请告诉我。
第 2 步:
使用tr
将所有号码替换为它们的"capital"版本,并用您需要的号码替换它们。因此,对于您的示例,要仅替换 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'
注意:要获得您需要的效果,您需要扩展 上面的命令才能生效。 运行 多次输入会产生错误的结果。
上述命令的输出:
First_name,id,second_name,phone_number
ram,727,prakash,96
hari,872,pallavi,98
anurag,456,aakash,87
另外:请注意您的 "expected" 输出是如何不正确的。第一个数字应该是 727,而不是 728。
BEGIN { FS=OFS="," }
{
cmd = "echo '" [=10=] "' | tr '1234567890' '8728125870'"
new = ( (cmd | getline line) > 0 ? line : )
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
执行
我想打乱数据的第 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
第 1 步:
生成一个随机数用于替换。这是用类似于 $(($RANDOM * 32768 + $RANDOM))
的东西完成的;如果您需要更多详细信息,请告诉我。
第 2 步:
使用tr
将所有号码替换为它们的"capital"版本,并用您需要的号码替换它们。因此,对于您的示例,要仅替换 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'
注意:要获得您需要的效果,您需要扩展 上面的命令才能生效。 运行 多次输入会产生错误的结果。
上述命令的输出:
First_name,id,second_name,phone_number
ram,727,prakash,96
hari,872,pallavi,98
anurag,456,aakash,87
另外:请注意您的 "expected" 输出是如何不正确的。第一个数字应该是 727,而不是 728。
BEGIN { FS=OFS="," }
{
cmd = "echo '" [=10=] "' | tr '1234567890' '8728125870'"
new = ( (cmd | getline line) > 0 ? line : )
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
执行