Awk 简单线路更换
如何让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 '{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“我需要它是一行”。