【问题标题】:Get values from the next row and merge- awk从下一行获取值并合并-awk
【发布时间】:2021-05-28 05:03:08
【问题描述】:

我有一个像这样的管道分隔文件

    OLD|123432
    NEW|232322
    OLD|1234452
    NEW|232324
    OLD|656966
    NEW|232325

我正在尝试创建一个新文件,我正在尝试根据第一列(OLD/NEW)中的值合并行。输出文件中的第一列将具有新编号,第二列将具有旧编号。

输出

232322|123432
232324|1234452
232325|656966

我在这里查看了答案How to merge every two lines into one from the command line?。我知道这不是确切的解决方案,而是用作起点。

并试图让它解决这个问题,但抛出语法错误。

awk -F "|" 'NR%2{OFS = "|" printf "%s ",$0;next;}1'

【问题讨论】:

  • 一个sed 单行可以是sed 'N;s/.*|\(.*\)\n.*|\(.*\)/\2|\1/' file

标签: awk text-processing


【解决方案1】:

你可以使用这个awk:

awk 'BEGIN {FS=OFS="|"} $1 == "NEW" {print $2, old} $1 == "OLD" {old = $2}' file

232322|123432
232324|1234452
232325|656966

【讨论】:

    【解决方案2】:

    使用$0 将具有整行的值。如果字段分隔符是管道,则第二列是$2,它有编号。

    如果您想将余数与NR%2 一起使用,另一种选择是将第二列的值存储在变量中,例如v

    awk 'BEGIN{FS=OFS="|"} NR%2{v=$2;next;}{print $2,v}' file
    

    输出

    232322|123432
    232324|1234452
    232325|656966
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多