我使用了以下命令,
awk 'BEGIN{print "Header"};{FIELDWIDTHS ="3 4 3"}{print $1"|"$2"|"$3"
|"};END{print "Footer"}' file8
实际的 -
Header
1234567890|||
234|5678|901|
345|6789|012|
098|7654|321|
Footer
期待 -
Header
123|4567|890|
234|5678|901|
345|6789|012|
098|7654|321|
Footer
答案1
您的第一行出现错误,因为{FIELDWIDTHS ="3 4 3"}
只有在读取并解析第一行之后才会应用该操作。
如果将FIELDWIDTHS
定义移动到块内,BEGIN
它将按预期工作:
awk 'BEGIN{print "Header"; FIELDWIDTHS ="3 4 3"}{print $1"|"$2"|"$3"|"};END{print "Footer"}' file8
请注意,FIELDWIDTHS
可能仅在 GNU Awk ( ) 中受支持gawk
。
答案2
通过以下命令实现并且效果也很好
命令:
awk 'NR==1{$0=substr($1,1,3)"|"substr($1,4,3)"|"substr($1,6,3)"|"}1' filename
输出
awk 'NR==1{$0=substr($1,1,3)"|"substr($1,4,3)"|"substr($1,6,3)"|"}1' l.txt
123|456|678|
234|5678|901|
345|6789|012|
098|7654|321|
Footer