如果等于特定值,则替换列

时间:2014-05-23 15:31:26

标签: linux unix awk sed

如果它等于N/A,我希望替换CSV中的第四列。我试图将其更改为-1。我似乎无法使其发挥作用。

awk -F , '{ if($4 == "N/A") {$4 = -1} }' test.csv

4 个答案:

答案 0 :(得分:12)

您可以使用以下awk

awk -F, '{ $4 = ($4 == "N/A" ? -1 : $4) } 1' OFS=, test.csv
  • 我们将输入和输出字段分隔符设置为,以保留csv文件中的分隔符
  • 我们检查第四个字段是否等于" N / A"然后我们为它赋值-1如果不是,我们保持原样。
  • 1最后根据我们的测试是否成功打印您的行,有或没有修改的第4列。
  • ($4=="N/A"?-1:$4)是一个三元运算符,用于检查条件$4=="N/A"是否为真。如果为真?,则我们分配-1,如果为:,则我们保持字段不变。

在示例文件上运行测试:

$ cat file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,N/A,4,5
24,sdf,sdf,4,2,254,5
a,f,f,N/A,f,4

$ awk -F, '{ $4 = ($4 == "N/A" ? -1 : $4) } 1' OFS=, file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,-1,4,5
24,sdf,sdf,4,2,254,5
a,f,f,-1,f,4

答案 1 :(得分:3)

这是另一个awk(使用来自jaypal的示例数据)

awk -F, '$4=="N/A" {$4=-1}1' OFS=, file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,-1,4,5
24,sdf,sdf,4,2,254,5
a,f,f,-1,f,4

答案 2 :(得分:0)

您也可以在sed

中执行此操作
$ sed -r 's/^([^,]*),([^,]*),([^,]*),N\/A,(.*)$/\1,\2,\3,-1,\4/g' file
a,b,c,d,e,f
1,2,3,4,5,6
44,2,1,-1,4,5
24,sdf,sdf,4,2,254,5
a,f,f,-1,f,4

答案 3 :(得分:0)

这是awk的替代方案,也是sed的较短正则表达式: 我使用了一个包含两边分隔符的正则表达式。

如果您的文件以制表符分隔,则可以使用 try { Bitmap mNewSaving = getBitmap(tv); String save_file = new File(dir, "View_" + System.currentTimeMillis() + ".png"); FileOutputStream mFileOutputStream = new FileOutputStream(save_file); mNewSaving.compress(Bitmap.CompressFormat.PNG, 95, mFileOutputStream); mFileOutputStream.flush(); mFileOutputStream.close(); } catch (FileNotFoundException e) { Log.v("hetal", "FileNotFoundExceptionError " + e.toString()); } catch (IOException e) { Log.v("hetal", "IOExceptionError " + e.toString()); } 代替\t

,

替换同一个文件,适合大文件,在使用前测试!!

sed 's/,N\/A,/,-1,/g' infile.csv >  outfile.csv