如何使用bash脚本来掩盖csv文件
问题描述:
文件的某些领域就像一个逗号分隔的文件:如何使用bash脚本来掩盖csv文件
hue,1,123456,wow,hai
heu,2,654321,waw,hey
uhe,3,001100,iwi,hel
euh,4,119988,qaq,hal
,我们希望用我们自己的方式来掩盖第三列:
0->9
1->8
2->7
3->6
4->5
5->4
6->3
7->2
8->1
9->0
于是脚本后,我们应该得到的东西,如:下列
hue,1,876543,wow,hai
heu,2,345678,waw,hey
uhe,3,998899,iwi,hel
euh,4,880011,qaq,hal
答
尝试,让我知道,如果这有助于你(在GNU AWK创建)。
awk -F, 'function change(field){num=split(field, array,"");for(i=1;i<=num;i++){gsub(/.*/,9-array[i],array[i]);new=new?new array[i]:array[i]};$3=new;new=""} change($3) 1' Input_file
输出如下。
hue 1 876543 wow hai
heu 2 345678 waw hey
uhe 3 998899 iwi hel
euh 4 880011 qaq hal
编辑:一个通用的解决方案,你可以改变值内BEGIN命名的数组阵列的结构,并可以利用任何你想要替换的,你可以更多的值要替换过在里面。
awk -F, '
BEGIN{
num=split("0-9,1-8,2-7,3-6,4-5,5-4,6-3,7-2,8-1,9-0",array,",");
for(i=1;i<=num;i++){
split(array[i],array1,"-");
value[array1[1]]=array1[2]
}
}
function change(field){
num=split(field, a,"");
for(i=1;i<=num;i++){
new=new?(a[i] in value?new value[a[i]]:new a[i]):(a[i] in value?value[a[i]]:a[i])
};
$3=new;
new=""
}
change($3)
1
' OFS=, Input_file
+0
你的脚本是好的。虽然我要求的是我可以定制该方法的脚本。所以你的脚本只适用于数量减少1的情况。但是,如果我想要类似 0-2 1-4 2-6 .... 它不会工作肯定。 – BeyondTryingToCode
+0
@BeyondTryingToCode,请现在检查我的编辑解决方案,让我知道如果这有助于你,那么你可以添加/编辑任何你想替代的值,让我知道。 – RavinderSingh13
@Inian是的,我们可以做到这一点 – BeyondTryingToCode