【问题标题】:change a single row into columns in a file将单行更改为文件中的列
【发布时间】:2014-03-30 22:58:54
【问题描述】:

我有一个包含这种格式数据的文件(只有一行)

1 2 3 5 7 9 

我想改成

1
2
3
5
7
9

编辑:

样本输入有 6 个数字。但实际数据可能有数千个数字。

我可以将文件复制到 Excel 中并进行转置。但是是否可以使用awksed 来做到这一点

【问题讨论】:

    标签: regex shell sed awk


    【解决方案1】:
    kent$ (master|✔) echo "1 2 3 5 7 9"|tr ' ' '\n'
    1
    2
    3
    5
    7
    9
    

    【讨论】:

    • 由于数据在文件中,所以应该是 cat fileName | tr ' ' '\n'.
    • 或许cat bla.txt | tr " " "\n" | cat > bla.txt
    【解决方案2】:

    您可以轻松地为此使用sed

    echo 1 2 3 5 7 9 | sed 's/ /\n/g'
    

    或者,如果您将所有内容都放在一个文件中:

    sed 's/ /\n/g' < filename
    

    【讨论】:

    • 谢谢。但是元素的数量不仅仅是6个元素。可能有1000个
    • 并非所有版本的 sed 都有 -r 标志。
    • @JoeNahmias:我没有投反对票。你的第二个版本对我有用
    • @JeanneBoyarsky:是的。事实证明,解决方案没有必要,所以我将其删除
    • @JoeNahmias sed 有一个使用率很低的翻译命令 y/ /\n/
    【解决方案3】:

    使用 xargs。

    echo 1 2 3 5 7 9  |xargs -n1
    

    或者,如果您将所有内容都放在一个文件中:

    xargs -n1 < file
    

    【讨论】:

      【解决方案4】:

      我用

      创建了一个包含 1M 个数字的测试文件
      awk 'BEGIN{for(i = 0; i < 1000000; i++) {printf "%d ", i} }' > t.txt
      

      结果:

      $ time tr ' ' '\n' <t.txt | tail -n 2
      999998
      999999
      real    0m0.018s
      $ time sed 's/ /\n/g' t.txt | tail -n 2
      999998
      999999
      real    0m0.223s
      $ time awk '{for (i = 1; i <= NF; i++) print $i}' t.txt | tail -n 2
      999998
      999999
      real    0m0.400s
      

      因此tr 是最快的方法。

      【讨论】:

        【解决方案5】:

        ..

        awk 1 RS='[[:space:]]+' file  
        

        【讨论】:

        • 我猜这仅适用于gnu awk,因为RS
        • @Jotne 谢谢,我不知道。
        • 据我所知,只有gnu awk支持多个字符作为记录选择器RS。取自gnu awk 手册:When using gawk, the value of RS is not limited to a one-character string.
        • 您可以通过操作OFS 使其更便携,例如awk '$1=$1' OFS='\n'.
        • @Thor 谢谢,好主意!我想知道如果文件中有不止一行,为什么这也有效。也就是为什么不输出ORS(也是换行)?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 2019-01-14
        相关资源
        最近更新 更多