基于其他列中的数据进行列操作的 awk/sed 过滤器示例

基于其他列中的数据进行列操作的 awk/sed 过滤器示例

我试图找到一个示例,说明如果第 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

相关内容