2013-02-28 74 views
0

如何添加6个单个空格分隔的列到文件中。将列添加到shell脚本中的字段

输入文件看起来像这样:

-11.160574 
... 
-11.549076 
-12.020907 
... 
-12.126601 
... 
-11.93235 
... 
-8.297653 

其中...代表人数的50个多行。

我想输出是这样的:

-11.160574 1 1 1 1 1 14 
... 
-11.549076 51 51 1 1 1 14 
-12.020907 1 1 2 2 1 14 
... 
-12.126601 51 51 2 2 1 14 
... 
-11.93235 1 1 51 51 1 14 
... 
-8.297653 51 51 51 51 1 14 

的第二和第三列是循环1至51

第四和第五列也环路1至51,但在上面的水平。

最后两个那些常量和1列14

+0

请问......为什么? – 2013-02-28 12:06:36

+0

不应该是49多行? – Thor 2013-02-28 13:15:13

+0

因为是Petrel加工 – user2118994 2013-02-28 14:41:18

回答

1

使用一个循环来读取文件中的行由行和维护计数器来跟踪该领域的数字如下图所示:

#!/bin/bash 
field1=1 
field2=1 
while read line 
do 
    echo "$line $field1 $field1 $field2 $field2 1 14" 
    ((field1++)) 
    if (($field1 == 52)); then 
     field1=1 
     ((field2++)) 
    fi 
done < file 
+0

它也很棒!作为awk脚本,我必须摆脱碰到第一列 – user2118994 2013-02-28 15:05:45

1

在这里你去,awk脚本:

{ 
    mod = 51 
    a = (NR - 1) % mod + 1 
    b = int((NR - 1)/mod) + 1 
    c = 1 
    d = 14 
    print $0,a,a,b,b,c,d 
} 

的东西,如awk -f the-script.awk in-file.txt运行它。或者使其可执行并在顶部添加#!/usr/bin/awk -f,并且可以直接运行它,而无需键入awk -f

+0

的'^ M'字符太棒了!非常感谢,它工作得很好,在第一列之后有一个'^ M'字符。 – user2118994 2013-02-28 14:46:11