【问题标题】:Merge specific lines - awk/sed合并特定行 - awk/sed
【发布时间】:2016-07-28 03:02:42
【问题描述】:

我有一个包含数千个数字的文本文件,排列如下:

line 1: #0 #1 #2 #3 #4 #5
line 2: #6 #7 #8 #9 #10 #11
...
line 111: #106 #107 #108 #109 #110
line 112: #111 #112 #113 #114 #115
...

我想做的是将我的文件格式化为如下所示:

line 1: #0 #1 #2 #3 #4 #5 #111 #112 #113 #114 #115 ...
line 2: #6 #7 #8 #9 #10 #11 #116 #117 #118 #119 #120 #121 ...
...
line 111: #106 #107 #108 #109 #110 #218 #219 #220 #221 #222 #223...

基本上我想将我的数字排列在一个 111x111 矩阵中(所以在前 111 行保留原位之后,第 112 行将与第一行合并,第 113 行与第二行合并,等等,这将发生在每 111 行)。有没有办法用 awk/sed 做到这一点?

任何帮助将不胜感激!

【问题讨论】:

    标签: awk sed


    【解决方案1】:

    如果您可以使用临时文件,您可以使用split,然后使用pastesplit 将文件拆分为更小的文件,每个文件由 n 行组成,paste 获取输入文件并将它们垂直连接起来。

    为我们的临时文件选择任意前缀tmp

    split -l 111 input.txt tmp
    paste tmp* >output.txt
    rm tmp*
    

    【讨论】:

    • 谢谢,它运行良好,我不介意有临时文件!
    • 没问题。如果它解决了您的问题,请随时 accept
    【解决方案2】:

    试试这个,未经测试,因为您没有提供可测试的样本输入/输出:

    awk -v RS='\\s' '{ORS=(NR%111?"\n":OFS)}1' file
    

    以上使用 GNU awk 进行多字符 RS 和 \s

    【讨论】:

      猜你喜欢
      • 2015-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 2018-08-25
      • 1970-01-01
      • 2014-10-05
      • 2014-07-10
      相关资源
      最近更新 更多