【发布时间】:2021-07-28 04:03:57
【问题描述】:
我有一个包含以下数据的文件
"col1","col2","col3","col4","col5","col6"
"CACR","0","SO2","50","6","2.0"
"FF","15","CO2","20","4","3"
"CACR","25","NOx","30","10",
"CACR","50","CO","40","5","0"
我想找到包含 CACR 的每一行,然后使用 Linux 终端将 col2、col4、col5 和 col6 的值除以 col6 的各个单元格(如果 col6 有 0 或空白单元格,则忽略除法计算)。因此,我的输出如下所示:
"col1","col2","col3","col4","col5","col6"
"CACR","0","SO2","25","3","1"
"CACR","25","NOX","30","10",
"CACR","50","CO","40","5","0"
我正在尝试使用 grep 和 awk
grep CACR file.csv | awk -F "," '$6 != 0; $6 == "" {$2 = $2/$6; $4= $4/$6; $5 = $5/$6; $6 = $6/$6}1'
但无法获得任何所需的输出。
【问题讨论】:
-
如果您使用的是
awk,则不需要grep。到目前为止,您尝试过什么? -
嗨@vgersh99 抱歉回复晚了,我用我一直在尝试的方法编辑了这个问题。我试过这个 grep CACR file.csv | awk -F "," '$6 != 0; $6 == "" {$2 = $2/$6; $4= $4/$6; 5 美元 = 5 美元/6 美元; $6 = $6/$6}1'
-
输入数据的逗号后面真的有这么多空格吗?双引号会让生活变得困难——如果它们不存在,你可以做算术,但是使用双引号,字符串(字段)不会转换为数字,所以算术不起作用。您将需要从字段中删除引号(编写一个 Awk 函数来执行此操作),然后您可以进行算术运算。重新打印带有引号的字段也很麻烦;再次,编写一个 awk 函数来提供帮助。
-
您好@JonathanLeffler 我在列之间没有空格。但我必须在输出中保留所有双引号和逗号。
-
请更新问题中的数据以删除空格 - 它们具有误导性。对于其余部分,
strip_quotes函数和add_quotes()函数应该会有所帮助。我观察到您的grep解决方案丢失了列标题 - 仅使用awk意味着您可以保留列标题。