如何将常量值添加到awk中以逗号分隔的列表中

时间:2015-09-19 14:33:34

标签: awk add

我的文件包含如下所示的样本:

col1     col2      col3    col4   col5                    col6
247828  313574  55,126,184  25  4734,163,133,81,130   247828,254465,256196,257161,261833

我需要将col1中的值添加到col6中的每个元素,以便输出如下所示:

awk -F "\t" 'BEGIN{OFS="\t"}{array[arraylen++]=$6;for (i =0; i < arraylen; i++) print array[i];  }1' 

我尝试使用

{{1}}

我想我失去了某处,它在col6中打印了6个元素。有人可以帮忙解决。

2 个答案:

答案 0 :(得分:0)

你可以选择这样的东西:

$ cat file
247828  313574  55,126,184      25      4734,163,133,81,130     0,6637,8368,9333,14005
$ awk -v OFS='\t' '{ n = split($6, a, ","); 
    s = ""; 
    for (i=1; i<=n; ++i) s = s a[i]+$1 (i<n?",":"");
    $6 = s;
} 1' file 
247828  313574  55,126,184      25      4734,163,133,81,130     247828,254465,256196,257161,261833

将输出字段分隔符设置为制表符(输入字符不需要更改默认值)。将第6个字段拆分为数组a。循环遍历数组以构建第6个字段的新值。

正如评论(谢谢)中所建议的那样,我不是反复分配给$6,而是使用了临时变量s。这意味着记录只写入一次,这对性能更好。

答案 1 :(得分:0)

$ awk 'NR>1 {
        split($6,a,/,/)
        new=""
        for (i=1;i in a;i++) {
            new = new (i>1?",":"") a[i]+$1
        }
        sub(/[^[:space:]]+$/,new)
    } 1' file
col1     col2      col3    col4   col5                    col6
247828  313574  55,126,184  25  4734,163,133,81,130   247828,254465,256196,257161,261833

请注意,上面的内容将保留您输入文件中字段之间最初的空格。