【问题标题】:awk keep only the first and last value on comma-seaparated fieldawk 仅保留逗号分隔字段的第一个和最后一个值
【发布时间】:2014-05-02 02:54:34
【问题描述】:

嗨'我试图在我的数据中只保留逗号分隔字段的第一个和最后一个值。以下是我的输入数据的样子

a    1   y    1,2,4,3,6,2,1
b    2   y    3,56,3,2,1
c    3   n    4,3,2,1,4

我只想在数据的第 4 行保留第一个和最后一个值,以便我的数据看起来像这样:

a    1    y    1,1
b    2    y    3,1
c    3    n    4,4

谁能帮助我如何做到这一点?谢谢

【问题讨论】:

  • 您问了几个问题,它们之间的差异很小。鉴于您收到的所有答案,您学到了什么?
  • 我想说的不多。下次发布您尝试过的内容。

标签: awk


【解决方案1】:

试试这个:

awk -F, -vOFS=, '{print $1,$NF}' input.txt

  • -F,输入字段分隔符
  • -vOFS=,输出字段分隔符
  • $1第一场
  • $NF最后一个字段

【讨论】:

    【解决方案2】:

    试试这个 awk 命令:

    awk '{size = split($4,numbers,",")}   {print $1" "$2" "$3" "numbers[1]","numbers[size]}'
    

    这会将第四个字段拆分为一个数组,将大小保存为 size,打印前 3 个字段,然后是 numbers 数组的第一个和最后一个元素。

    【讨论】:

      【解决方案3】:

      awk -F, '{ printf "%s,%s\n", $1, $NF}' 应该可以胜任!

      【讨论】:

      • 事实上,我测试了 printf 但得到了一个奇怪的行为,但这是我的术语的错。已编辑;-)
      【解决方案4】:

      如果您的其他字段可以包含逗号:

      $ awk '{sub(/,.*,/,",",$NF)}1' file
      a 1 y 1,1
      b 2 y 3,1
      c 3 n 4,4
      

      如果没有:

      $ awk '{sub(/,.*,/,",")}1' file
      a    1   y    1,1
      b    2   y    3,1
      c    3   n    4,4
      

      【讨论】:

        猜你喜欢
        • 2014-03-17
        • 1970-01-01
        • 2023-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-12
        • 1970-01-01
        • 2012-05-19
        相关资源
        最近更新 更多