gpt4 book ai didi

Linux shell awk : displaying different column values when condition met

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:41:07 25 4
gpt4 key购买 nike

我如何在 awk 命令中同时使用条件语句和循环语句将具有特殊值的文件转换为不同的值(如“Error”),而不做任何减法,而只是将转换后的新值(如“Error”)显示为输出?

  1. 如果没有任何列值(除了在最终输出中保持不变的第 1 列)等于特殊值,如“11111”,我使用如下 awk 命令:

    awk -F, '{print $1,$2,($3-$2),($4-$2),($5-$2),($6-$2),($7-$2),($8-$2),($9-$2),($10-$2),($11-$2),($12-$2),($13-$2),($14-$1)} ' all.cvs
  2. 如果列值=特殊值,则无需执行“-$2”,只需显示一个新值,如“Error”

基本上我想要:x 表示列 #2 到 #14 的列值

  • 如果 $2(第 2 列)= 11111

    set $2="Error"
  • 对于 $3 到 $14(#3 到 #14 列)如果列值为 <> 11111

    $x=$x-$2 
  • 如果列值=11111

    $x=Error
  • 最后,输出仍将显示 14 列,包括原始的 #1 列值和转换/计算的列 #2 到 #14 的新值

我有一个如下所示的文件 (all.cvs):

  • 14个字段

  • 每一行可能包含一个字段,其值类似于“11111”(或任何字符串值)

  • 每列用“,”分隔

  • 总行数为90


$cat all.cvs

A,11111,2,3,4,5,6,7,8,9,10,11,12,13

B,1,2,3,4,5,6,11111,8,9,10,11,12,13

C,1,2,3,4,5,6,7,8,9,11111,11,12,13
....

最佳答案

awk -F, -v OFS=, -v flag_value=11111 '
{subtract = $2}
$2 == flag_value {$2 = "Error"; subtract = 0}
{
for (i=3; i<=NF; i++) $i = ($i == flag_value ? "Error" : $i - subtract)
print
}
'

关于Linux shell awk : displaying different column values when condition met,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10169849/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com