平锉切割线

CUT LINES OF FLAT FILE

我有一个没有 Carriage Return 和 Line Feed 的平面文件,用于分隔换行符。

例如我的文件“file.t4”

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

我需要一个每隔 20 个字符剪切的文件“filev2.t4”,结果将是这样的:

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

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

你能帮帮我吗?

使用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.

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

每 20 个字符换行:

fold -b -w 20 file

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

Perl 解决方案

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