Awk 简单线路更换

Awk 简单线路更换,awk,Awk,如何让AWK正确地将数据文件的值交换为字符串“大于”(比以前)或“小于”(比以前) 我正在努力: awk '{if ($1>prev); print ($1="greater"); prev="smaller"}' arraydatafile arraydatafile文件: 2 7 6 1 7 3 期望输出: smaller greater ##### because 7 is greater than previous which is 2 .. smaller

如何让AWK正确地将数据文件的值交换为字符串“大于”(比以前)或“小于”(比以前)

我正在努力:

awk '{if ($1>prev); print ($1="greater"); prev="smaller"}' arraydatafile
arraydatafile文件:

 2
 7
 6
 1
 7
 3
期望输出:

 smaller 
 greater ##### because 7 is greater than previous which is 2 ..
 smaller ##### because 6 is smaller than previous which is 7 .. 
 smaller ##### because 1 is smaller than previous which is 1 ..
 greater ##### etc etc
 smaller
我得到了一个不和谐的东西

非常感谢您在这方面的见解

更新:

有一个新的数据文件用于澄清手头的任务:

ArrayData文件:

 2
 7
 6
 6
 1
 7
 3
期望输出

 smaller
 greater
 smaller
 equal ##### will remove it later, would be nice if this could be done right from the script or one liner preferrably though
 smaller 
 greater 
 smaller
我如何在AWK中得到一行代码来实现这一点?它只是将前面的代码与下一个代码进行比较,并说明它们的比较结果。然后我将用另一行代码删除“相等”的输出行,而不是使这个小脚本复杂化,以简化当前的任务

脚本replace.awk:

 #!/bin/awk -f
 NR>1 {
 if($1==p){
    # Skip identical lines
    next
 }
 if($1>p){
    print "smaller"
 }else{
    print "greater"
 }
 }

 # Store previous value    
 {p=$1}
在arraydatafile上运行

  7
  6
  6
  1
  7
  3
结果如下

 root@debian:/home/user/Documents/# awk -f replace.awk arraydatafile
 smaller
 greater
 greater
 smaller
 greater
如何获得所需的输出?

如下所示:

NR>1 {
    if($1==p){
        # Skip identical lines
        next
    }
    if($1>p){
        print "smaller"
    }else{
        print "greater"
    }
}

# Store previous value    
{p=$1}

为什么2(第一行)“更小" ? 如果连续行的值相等怎么办?读一行。将该值与前一行进行比较,并输出适当的字符串。存储行以便在下一次迭代中使用。重复。如果两者的值相同,您希望打印什么?在您的示例输入/输出中稍加思考和努力,添加您迄今为止尝试过的内容以及您需要帮助的部分。7比下一行(即6)小。那么为什么7被替换为更大,而2被替换为更小?我希望2被替换为更大的,因为它比前一行大,前一行是空的。请认真思考您的需求并更新您的问题,以清楚地说明它们是什么,并使用一个涵盖所有用例的示例,包括一个连续的相同值。答案可能是42。一个可用的线性版本?需要精确的代码一行。只要把它放在一行就行了。保证阻止人们试图帮助你的短语:1)“这行不通”,紧跟其后的是2“我需要它是一行”。