【问题标题】:using awk to record certain column value every Nth row使用 awk 每第 N 行记录某个列值
【发布时间】:2021-09-21 17:28:33
【问题描述】:

我有一个文件,其中包含数十万行 6 列的数据。

具有数据的第一行从第 304 行开始。我正在寻找一个“awk”命令,它可以在每增加 243 行后给我第 2 列的值。所以第一个值是“第 304 行第 2 列”,第二个值是“第 547 行第 2 行”,依此类推...

谢谢

【问题讨论】:

  • 请在您的问题中添加 3 个简单的内容。第一个输入样本,第二个输出样本。 3rd-您尝试过的代码作为努力,这将使您的问题更加清晰,谢谢。

标签: awk multiple-columns rows


【解决方案1】:

使用模运算符:

awk '! (FNR < 304 || (FNR-304) % 243) {print $2}' file

或者一个计数器变量:

awk '++c == 304 {print $2; c -= 243}' file

【讨论】:

  • 非常感谢!它完美无缺!我有这个命令,我想和你的结合起来,那就是:awk 'NR> 242 {print $1}' file.txt | uniq 和我想将它们放在两个单独的列中并将它们放在一个新文件中,有什么建议吗?再次感谢,不胜感激!
【解决方案2】:

读取的每一行都拆分为字段:$2 是第 2 列

NR 是正在读取的行的当前行号。

试试这个:

awk 'NR>=304 && !((NR-304)%243) { print $2;}' file.txt

【讨论】:

  • 非常感谢杰伊!正是我在寻找什么。我有这个命令,我想和你的结合起来,那就是:awk 'NR> 242 {print $1}' file.txt | uniq 和我想将它们放在两个单独的列中并将它们放在一个新文件中,有什么建议吗?再次感谢,不胜感激!
  • 这个不清楚。也许尝试提出一些建议,我们会发表评论。
【解决方案3】:

使用 GNU awk,您可以做到这一点

awk 'NR==304 || NR==x{print $2;x=NR+243}' input

输入:

$ paste <(seq 10000) <(seq 10000) > input

输出:

304
547
790
1033
1276
1519
1762
2005
2248
2491
2734
2977
3220
3463
3706
3949
4192
4435
4678
4921

【讨论】:

  • 该命令不是特定于 GNU awk 的,它在任何 awk 中的行为方式都相同。
猜你喜欢
  • 2023-02-04
  • 2021-11-21
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 1970-01-01
  • 2015-08-01
  • 1970-01-01
  • 2021-12-24
相关资源
最近更新 更多