如何将常量值添加到awk中的逗号分隔列表
how to add constant value to a comma separated list in awk
我有如下所示的样品丝束文件:
col1 col2 col3 col4 col5 col6
247828 313574 55,126,184 25 4734,163,133,81,130 0,6637,8368,9333,14005
我需要将 col1 中的值添加到 col6 中的每个元素,以便输出如下所示:
col1 col2 col3 col4 col5 col6
247828 313574 55,126,184 25 4734,163,133,81,130 247828,254465,256196,257161,261833
我试过使用
awk -F "\t" 'BEGIN{OFS="\t"}{array[arraylen++]=;for (i =0; i < arraylen; i++) print array[i]; }1'
我想我迷路了,它在 col6 中打印了 6 个元素。有人可以帮忙解决吗。
你可以这样做:
$ cat file
247828 313574 55,126,184 25 4734,163,133,81,130 0,6637,8368,9333,14005
$ awk -v OFS='\t' '{ n = split(, a, ",");
s = "";
for (i=1; i<=n; ++i) s = s a[i]+ (i<n?",":"");
= s;
} 1' file
247828 313574 55,126,184 25 4734,163,133,81,130 247828,254465,256196,257161,261833
将输出字段分隔符设置为制表符(输入的默认值不需要更改)。将第 6 个字段拆分为数组 a
。遍历数组以建立第 6 个字段的新值。
正如评论中所建议的(谢谢),我没有重复分配给 </code>,而是使用了一个临时变量 <code>s
。这意味着记录只写入一次,这对性能更好。
$ awk 'NR>1 {
split(,a,/,/)
new=""
for (i=1;i in a;i++) {
new = new (i>1?",":"") a[i]+
}
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
请注意,上面的内容将保留输入文件中字段之间最初的任何白色 space。
我有如下所示的样品丝束文件:
col1 col2 col3 col4 col5 col6
247828 313574 55,126,184 25 4734,163,133,81,130 0,6637,8368,9333,14005
我需要将 col1 中的值添加到 col6 中的每个元素,以便输出如下所示:
col1 col2 col3 col4 col5 col6
247828 313574 55,126,184 25 4734,163,133,81,130 247828,254465,256196,257161,261833
我试过使用
awk -F "\t" 'BEGIN{OFS="\t"}{array[arraylen++]=;for (i =0; i < arraylen; i++) print array[i]; }1'
我想我迷路了,它在 col6 中打印了 6 个元素。有人可以帮忙解决吗。
你可以这样做:
$ cat file
247828 313574 55,126,184 25 4734,163,133,81,130 0,6637,8368,9333,14005
$ awk -v OFS='\t' '{ n = split(, a, ",");
s = "";
for (i=1; i<=n; ++i) s = s a[i]+ (i<n?",":"");
= s;
} 1' file
247828 313574 55,126,184 25 4734,163,133,81,130 247828,254465,256196,257161,261833
将输出字段分隔符设置为制表符(输入的默认值不需要更改)。将第 6 个字段拆分为数组 a
。遍历数组以建立第 6 个字段的新值。
正如评论中所建议的(谢谢),我没有重复分配给 </code>,而是使用了一个临时变量 <code>s
。这意味着记录只写入一次,这对性能更好。
$ awk 'NR>1 {
split(,a,/,/)
new=""
for (i=1;i in a;i++) {
new = new (i>1?",":"") a[i]+
}
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
请注意,上面的内容将保留输入文件中字段之间最初的任何白色 space。