Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
awk+;一行awk语法,仅在第二个字段中打印一次;“真的”;词匹配_Awk - Fatal编程技术网

awk+;一行awk语法,仅在第二个字段中打印一次;“真的”;词匹配

awk+;一行awk语法,仅在第二个字段中打印一次;“真的”;词匹配,awk,Awk,我不知道怎么用awk做这个 但我的目标是创建awk单行语法,以便在需要时打印第二个字段($2) 所有第一个字段($1)均为真 比如说 我有档案: true my_name_is_lenon true my_name_is_lenon true my_name_is_lenon false my_name_is_lenon true my_name_is_lenon false my_dog_is_fat true my_dog_is_fat tr

我不知道怎么用awk做这个 但我的目标是创建awk单行语法,以便在需要时打印第二个字段($2) 所有第一个字段($1)均为真

比如说

我有档案:

   true my_name_is_lenon
   true my_name_is_lenon
   true my_name_is_lenon
   false my_name_is_lenon
   true my_name_is_lenon

   false my_dog_is_fat
   true my_dog_is_fat
   true my_dog_is_fat

   true I_am_very_tall
   true I_am_very_tall
   true I_am_very_tall

   true my_ball_is_fine
   true my_ball_is_fine
awk将仅打印以下内容:

 I_am_very_tall
 my_ball_is_fine
因为我个子很高,所以我的球很好,在第一场比赛中没有失误

我的狗很胖,我的名字没有打印出来,因为第一个字段上有一个错误的单词

规则是,如果第一个字段上没有错误单词,则打印第二个字段!(第二栏的所有相同句子)


丽迪亚

我不确定它是否可能成为awk单轮客机。至少不容易。是否绝对需要awk?如果awk只是解决方案的一部分,那么就有单线外壳解决方案可用

awk '
  $1 == "true" && ! ($2 in false) {true[$2]}
  $1 == "false" {false[$2]; delete true[$2]}
  END {for (word in true) print word}
' true.txt
例如,这是一个单壳衬里(只是一条长线):

awk'{print$2}'<{infle}}同时读取行;dogrep-i“false$line”{infle}>/dev/null | | echo$line;完成| uniq
虽然效率不高,但它确实起到了作用

相比之下,我得到的最短的awk解决方案大约是25行(如果你愿意,我可以把它放在这里——留下评论,我会相应地更新它)。但这意味着您可以将其保存到文件并执行
awk-f alltrue.awk<{infle}
。我不确定这是否严格地将类作为perl单行程序:-)

更好地了解您最终想要实现的目标或目的可能会很有用。

这里有一种方法:

awk '{if ($1 == "false") {array[$2] = $1} else if (array[$2] != "false") array[$2] = $1} END {for (i in array) if (array[i] == "true") print i}' inputfile
编辑:

这里有多行:

awk '{if ($1 == "false") 
         {array[$2] = $1} 
     else if (array[$2] != "false") 
         array[$2] = $1} 
     END {for (i in array)
             if (array[i] == "true") 
                 print i}
' inputfile
还有一个:

awk 'END { 
  for (A in all)  
    if (!(A in ko)) print A
  }
NF { all[$2] } 
$1 == "false" { ko[$2] }
' infile

如果要保留原始顺序,则需要更多代码。

另一个紧凑的解决方案

awk '
  $1 == "true" && ! ($2 in false) {true[$2]}
  $1 == "false" {false[$2]; delete true[$2]}
  END {for (word in true) print word}
' true.txt

假设每个块属于同一类别

$ awk -vRS= '!/false/' file | uniq | awk '{print $NF}'
I_am_very_tall
my_ball_is_fine
还有一种方法:

gawk '{a[$2]=a[$2] || $1=="false"} END {for (i in a) if (!a[i] && i) print i}' a.txt

my_ball_is_fine
I_am_very_tall
这是一条单行线:

awk '{$1=="false" ? false[$2]="false" : true[$2]="true"} END{for (i in true) if   (!false[i]) {print i} }'
我的球很好
我很高

嗨,丹尼斯,你能像拉多洛夫那样换一下awk吗?(不是一行)THXlidia@lidia:好的,但你的问题是“awk一行语法”。我认为最好不要一行(在脚本中看起来不好)抱歉,这不起作用,请尝试以下文件:真我的名字真我的名字真我的狗真我的狗真我的狗真我很高真我很高真我很高真我很高真我很高真的我的球很好真的我的球很好