【问题标题】:Bash to merge 2 consecutive lines in a file [duplicate]Bash合并文件中的2个连续行[重复]
【发布时间】:2014-04-25 12:21:24
【问题描述】:

我想在给定文件上转换此文本:

87665
S
3243423
S
334243
N
...

到这样的事情:

87665,S
3243423,S
334243,N
...

我一直在阅读一些similar questions,但它没有用...有没有办法在 linux 中使用单行命令来做到这一点? 谢谢!

【问题讨论】:

  • 是的,我没有找到上面的答案,是重复的..谢谢
  • 我记得,因为我已经回答了这个问题。最初,我认为这是同一个问题链接,但后来没有找到我的答案......:D
  • :D 找了一会儿答案,没找到,标题“如何合并这些文件”.. 对我来说太笼统了!呵呵...无论如何,我刚刚将我的问题投票为重复

标签: linux bash command-line


【解决方案1】:

使用sed:

sed '$!N;s/\n/,/' filename

使用paste

paste -d, - - < filename

paste 会留下一个尾随 ,,以防输入的行数为奇数。

【讨论】:

    【解决方案2】:

    这样的事情可能对你有用:

    $ awk 'NR%2{a=$0;next}{print a","$0}' file
    87665,S
    3243423,S
    334243,N
    

    要处理奇数行的文件,你可以这样做:

    awk '{printf "%s%s", $0, NR%2?",":ORS}' file
    

    【讨论】:

    • 您可能想使用ORS 而不是"\n"
    • 我同意。如果用户有不同的 ORS 集,这可能会更好。 (我们还保存一个字符:))
    • +1: @user000001 习惯上你可以这样做 awk 'ORS=(NR%2)?",":RS' file
    • @JS 不错!
    【解决方案3】:

    纯粹为了好玩,纯 bash 解决方案:

    while IFS= read -r l1; do
        read -r l2
        printf '%s\n' "$l1${l2:+,$l2}"
    done < file
    

    如果行数为奇数,则最后一行不会有尾随逗号。

    【讨论】:

      猜你喜欢
      • 2018-06-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-31
      相关资源
      最近更新 更多