【问题标题】:awk one liner to create third column field from two columnsawk one liner 从两列创建第三列字段
【发布时间】:2017-01-04 19:22:12
【问题描述】:

寻找 awk one 班轮根据第二个字段创建新的第三个字段。

起始数据:

column1,test.columna
column2,test1.columnb
column3,test2.columnc

test.columna(第二个字段)现在是“columnatest”(第一行)的结束数据,位于新的第三个字段中,由“,”分隔。

column1,test.columna,columnatest
column2,test1.columnb,columnbtest1
column3,test2.columnc,columnctest2

获得第三列本身很容易:

awk -F, '{print $2}' a | awk -F. '{print $2$1}'

columnatest
columnbtest1
columnctest2

组合所有三个字段时遇到问题。

【问题讨论】:

  • 如果我们详细说明你的想法,它会变成这样:awk -F'[,.]' '{print $0,$2$1}' OFS="," file

标签: awk


【解决方案1】:
$ awk 'BEGIN{FS=OFS=","} {split($2,f,/\./); print $0, f[2] f[1]}' file
column1,test.columna,columnatest
column2,test1.columnb,columnbtest1
column3,test2.columnc,columnctest2

【讨论】:

  • 好吧,但是你为什么不玩FS呢? (即:-F[.,] 不是更短吗?
  • 是的,那也很好,你只需要确保使用$NF$(NF-1),以防column1等包含.s (awk 'BEGIN{FS="[.,]"; OFS=","} {print $0, $NF $(NF-1)}' file ) 并确保不要修改任何字段,如果这成为更大脚本的一部分。
  • 我的想法是只写:awk -F[.,] '{print $0","$NF$1}' (最后一个分隔符硬编码)
  • 恕我直言,无论您是硬编码 "," 还是设置 OFS 都无关紧要。 ITYM $(NF-1),但不是 $1。简洁本身并不是目标,只要代码简洁高效,无论如何......
猜你喜欢
  • 2014-03-19
  • 2012-11-02
  • 2015-02-04
  • 2017-06-12
  • 2012-09-01
  • 2020-07-24
  • 2011-09-15
  • 2014-03-20
  • 1970-01-01
相关资源
最近更新 更多