【问题标题】:CUT LINES OF FLAT FILE平面文件的剪切线
【发布时间】:2023-04-11 11:41:02
【问题描述】:

我有一个没有回车和换行的平面文件,用于分隔换行符。

例如我的文件“file.t4”

Sergio 180 32 1988  Juan 148 34    1986 Silvia 162 30 1900

我需要一个文件“filev2.t4”,每 20 个字符剪切一次,结果如下:

Sergio 180 32 1988
Juan 148 34 1986
Silvia 162 30 1900

我尝试使用“cut”命令在 bash 中执行此操作,但没有得到想要的结果

你能帮帮我吗?

【问题讨论】:

  • 很好,你提到你用cut尝试了一些东西,你可以在你的问题中提到它们;没有对错,因为我们都在这里学习,干杯。
  • awk '$1=$1' FPAT='.{1,20}' OFS='\n' file.t4 >filev2.t4?

标签: bash shell awk sh


【解决方案1】:

Perl 解决方案

$ perl -ne 'while(/.{20}/osmg) { print "$&\n" } ' sergio.txt
Sergio 180 32 1988
Juan 148 34    1986
Silvia 162 30 1900
$

【讨论】:

    【解决方案2】:

    有了awk,这将是一件容易的事,请尝试关注。使用所示示例编写和测试。

    awk '{gsub(/.{20}/,"&\n")} 1' Input_file
    

    sed的逻辑相同:

    sed -E 's/.{20}/&\n/g' Input_file
    

    有一个更便携的替代品

    sed 's/.\{20\}/&\
    /g' Input_file
    

    根据POSIX specification, s command.

    【讨论】:

    • 不错的答案,Ravinder,我使用更便携的替代方法进行了编辑,而不是评论,因为我认为我不能在评论中的代码中添加文字换行符。如果您觉得它太侵入性,请随意回滚。干杯!
    • @Quasímodo,感谢您添加信息丰富的信息,干杯
    【解决方案3】:

    bash方法:

    (while IFS= read -r -n20 line; do
       printf "%s\n" "$line"
     done < file.t4
     [[ -n $line ]] && printf "%s\n" "$line") > filev2.t4
    

    导致新文件存在

    Sergio 180 32 1988
    Juan 148 34    1986
    Silvia 162 30 1900
    

    【讨论】:

      【解决方案4】:

      也可以使用fold来实现(如cut,coreutils的一部分)

      每 20 个字符换行:

      fold -b -w 20 file
      

      【讨论】:

        猜你喜欢
        • 2017-10-11
        • 2021-10-25
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 2023-03-04
        • 2018-08-10
        • 2019-02-12
        • 2011-07-31
        相关资源
        最近更新 更多