awk解决方案,用于将当前行与下一行进行比较,并根据条件打印其中一行

awk解决方案,用于将当前行与下一行进行比较,并根据条件打印其中一行,第1张

概述我有一个看起来像这样的输入文件(第一列是位置编号,第二列是应该随时间增加的计数): 1 01 21 61 71 71 81 71 71 91 91 101 101 91 101 101 我有一个看起来像这样的输入文件(第一列是位置编号,第二列是应该随时间增加的计数):
1       01       21       61       71       71       81       71       71       91       91       101       101       91       101       101       101       101       101       101       91       101       101       101       101       101       10

并且我想修复它看起来像这样(替换计数随先前计数减少):

1       01       21       61       71       71       81       81       81       91       91       101       101       101       101       101       101       101       101       101       101       101       101       101       101       101       10

我一直在尝试使用awk,但是因为我似乎无法弄清楚如何重置行号(NR?)所以它会读取每一行并且它是下一行,而不是两行一次.这是我到目前为止的代码,有什么想法吗?

awk '{a=; b=; getline; c=; d=; if (a==c && b<=d) print a"\t"b; else print c"\t"d}' original.txt > fixed.txt

此外,这是我目前得到的输出:

1       01       61       71       71       91       101       91       101       101       91       101       101       10
解决方法 也许你想要的只是:
awk ' < p {  = p } { p =  } 1' input-file

如果第二列中的值为负,则第一行将失败,因此:

awk 'NR > 1 &&  < p ...'

如果当前值较小,这只是将第二列设置为前一个值,然后将当前值存储在变量p中,然后打印该行.

请注意,这也会稍微修改更改行的输出间距.如果您的输入是以制表符分隔的,则可能需要执行以下 *** 作:

awk 'NR > 1 &&  < p {  = p } { p =  } 1' OFS=\t input-file
总结

以上是内存溢出为你收集整理的awk解决方案,用于将当前行与下一行进行比较,并根据条件打印其中一行全部内容,希望文章能够帮你解决awk解决方案,用于将当前行与下一行进行比较,并根据条件打印其中一行所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1039920.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存