如何使用bash脚本来屏蔽csv文件的某些字段

时间:2017-10-19 18:10:24

标签: bash csv unix

该文件是逗号分隔文件,如:

// ==UserScript==
// @name     Hide Animations from IMBD search results
// @match    *://*.imdb.com/search*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js
// @grant    GM_addStyle
// ==/UserScript==
//- The @grant directive is needed to restore the proper sandbox.

$(".lister-item").has (".genre:contains('Animation')").hide ();

我们想用自己的方法掩盖第三列:

    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

1 个答案:

答案 0 :(得分:0)

尝试关注并告诉我这是否有助于您(在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