我的文件包含如下所示的样本:
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个元素。有人可以帮忙解决。
答案 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
请注意,上面的内容将保留您输入文件中字段之间最初的空格。