平锉切割线
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
也可以使用 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
$
我有一个没有 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
也可以使用 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
$