我有一个逗号分隔文件,其中某些值可能会丢失,如
1,f,12,f,t,18
2,t,17,t, ,17
3,t,15, ,f,16
我想将一些列更改为数字; f到0和t到1.这里,我只想更改第2列和第5列,不想更改第4列。我的结果文件应该看起来像
1,0,12,f,1,18
2,1,17,t, ,17
3,1,15, ,0,16
我可以使用声明
awk -F, -v OFS=',' '{ if ( $2 ~ /t/ ) { $2 = 1 } else if ( $2 ~ /f/ ) { $2 = 0 }; print}' test.csv
更改单个列
我也可以使用像
这样的循环 awk -F, -v OFS=',' 'BEGIN {
IFS = OFS = ","
}
{
for (column = 1; column <= 4; ++column) {
if ($column ~ /t/) {
$column = 1
}
else if($column ~ /f/) {
$column = 0
}
}
print
}
' test.csv
如果它们在一起,则替换多个列。如何更改for循环以仅指定特定列?我知道每个循环都有一个相同的但我无法让它工作。另外,我如何在单个语句中为数组分配多个变量,如
a =[1, 2, 3, 4]
答案 0 :(得分:3)
你可以使用这个awk:
awk 'BEGIN{ FS=OFS=","; a[2]; a[5] }
{ for (i in a) if ($i=="f") $i=0; else if ($i=="t") $i=1 } 1' file
1,0,12,f,1,18
2,1,17,t, ,17
3,1,15, ,0,16