如果它等于N/A
,我希望替换CSV中的第四列。我试图将其更改为-1
。我似乎无法使其发挥作用。
awk -F , '{ if($4 == "N/A") {$4 = -1} }' test.csv
答案 0 :(得分:12)
您可以使用以下awk
:
awk -F, '{ $4 = ($4 == "N/A" ? -1 : $4) } 1' OFS=, test.csv
,
以保留csv文件中的分隔符-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