将文件 txt 中的第一行变成 + 3 列

将文件 txt 中的第一行变成 + 3 列

在此输入图像描述我有一个txt文件,如下所示:

#A9999999999999              012021I                                   
0099999999    000000000099999999+000000000000000000-000000000000000000-  
0099999999    000000000099999999+000000000000000000-000000000000000000-  
0099999999    000000000099999999+000000000000000000-000000000000000000-  
0099999999    000000000099999999+000000000000000000-000000000000000000-

对于第一行,我想再创建 3 列

9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-

此示例将包括 3 列,其中包含第一行的值,第一列包含这些位置:第一列 (08-15)、第二列 (30-35)、第三列位置 36 以及第一行的数据。

在插入文件的第一部分期间,选项卡对某些浏览器的结构进行了一些更改。所以我放了一张文件布局的照片。

我目前正在使用 Debian。我尝试使用cat和 的前几次尝试sed。由于我不熟悉语法,所以我来询问一些示例。

答案1

在每个 Unix 机器上的任何 shell 中使用任何 awk:

$ cat tst.awk
BEGIN { OFS="," }
NR==1 {
    pfx = substr($0,8,7) OFS substr($0,30,6) OFS substr($0,36,1)
    next
}
{
    gsub(/[+-]/,"& ")
    $1 = pfx OFS $1
    print
}

$ awk -f tst.awk file
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-
9999999,012021,I,0099999999,000000000099999999+,000000000000000000-,000000000000000000-

相关内容