我试图找到一个示例,说明如果第 2 列和第 5 列中的数据不等于“null”,如何有效地使用 sed 或 awk 来操作特定列(例如第 1 列)中的 csv 数据。
未过滤的示例:
未填充、空、数据、数据、空、数据 无人居住,数据,数据,数据,数据,数据 无人居住,数据,数据,数据,空,数据 未填充、空、数据、数据、空、数据 未填充、空、数据、数据、数据,数据
会成为:
未填充、空、数据、数据、空、数据 人口稠密,数据,数据,数据,数据,数据 无人居住,数据,数据,数据,空,数据 未填充、空、数据、数据、空、数据 未填充、空、数据、数据、数据,数据预先感谢您的帮助!
答案1
awk 'BEGIN{ FS=OFS="," }
$2!="NULL" && $5!="NULL"{$1="POPULATED"}1' infile.csv
FS是输入F产量S分离器和 OFS 用于氧输出F产量S分隔符,我们都设置为逗号字符开始NING 在处理输入文件之前。
我们正在检查这两列(column#2$2
和column#5 $5
)是否不是无效的value) !="NULL"
,然后更新第一列值$1="POPULATED"
,然后使用成语1
最后,输入行将被输出,并应用所有更改。
如果您的意思是 NULL 为空列,则只需与空字符串进行比较,如下所示:
awk 'BEGIN{ FS=OFS="," }
$2!="" && $5!=""{$1="POPULATED"}1' infile.csv
答案2
#!/usr/bin/python
k=open('filepath','r')
for i in k:
gsplit=i.strip().split(',')
if (gsplit[1] != "NULL" and gsplit[4] !="NULL"):
jk="POPULATED"
print jk+","+",".join(gsplit[1:])
else:
print i.strip()
输出
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
UNPOPULATED,NULL,DATA,DATA,NULL,DATA
POPULATED,DATA,DATA,DATA,DATA,DATA