合并每隔一列
Merge every other column
正在尝试合并从 </code> 开始的所有其他制表符分隔列 </p>
<pre><code>NC_044998.1 3757 ref ref ref ref ref ref ref ref ref dev
所以输出是
NC_044998.1 3757 refref refref refref refref refdev
使用
awk 'BEGIN {FS = "\t"} {for (i=3; i<=12; i+=2) {gsub(/\t/, "", $i)1;} print [=12=]};' input
但输出与输入相同
使用 GNU awk:
awk 'BEGIN {FS=OFS="\t"} { for (i=0; i<5; i++){$(i+3)=$(i*2+3) $(i*2+4)} NF=7; print }' input
输出:
NC_044998.1 3757 refref refref refref refref refdev
这里发生了什么?
- 第 3 列获取第 3 列和第 4 列的内容。
- 第 4 列获取第 5 列和第 6 列的内容。
- 第 5 列获取第 7 和 8 列的内容。
- 第 6 列获取第 9 列和第 10 列的内容。
- 第 7 列获取第 11 和 12 列的内容。
- 列的输出仅限于前 7 列 (
NF=7
)。
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
使用 gnu awk
,你可以使用正则表达式来做到这一点:
awk -F '\t' -v beg=2 '{
s=""
for (i=1; i<=beg; ++i)
s = s $i FS;
print s gensub( /\t+(\S+\t*)/, "\1", "g", substr([=10=], length(s)+1) )
}' file
NC_044998.1 3757 refref refref refref refref refdev
PS:您可以将任何其他列位置作为此 awk 命令中的 beg
参数
正在尝试合并从 </code> 开始的所有其他制表符分隔列 </p>
<pre><code>NC_044998.1 3757 ref ref ref ref ref ref ref ref ref dev
所以输出是
NC_044998.1 3757 refref refref refref refref refdev
使用
awk 'BEGIN {FS = "\t"} {for (i=3; i<=12; i+=2) {gsub(/\t/, "", $i)1;} print [=12=]};' input
但输出与输入相同
使用 GNU awk:
awk 'BEGIN {FS=OFS="\t"} { for (i=0; i<5; i++){$(i+3)=$(i*2+3) $(i*2+4)} NF=7; print }' input
输出:
NC_044998.1 3757 refref refref refref refref refdev
这里发生了什么?
- 第 3 列获取第 3 列和第 4 列的内容。
- 第 4 列获取第 5 列和第 6 列的内容。
- 第 5 列获取第 7 和 8 列的内容。
- 第 6 列获取第 9 列和第 10 列的内容。
- 第 7 列获取第 11 和 12 列的内容。
- 列的输出仅限于前 7 列 (
NF=7
)。
参见:8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR
使用 gnu awk
,你可以使用正则表达式来做到这一点:
awk -F '\t' -v beg=2 '{
s=""
for (i=1; i<=beg; ++i)
s = s $i FS;
print s gensub( /\t+(\S+\t*)/, "\1", "g", substr([=10=], length(s)+1) )
}' file
NC_044998.1 3757 refref refref refref refref refdev
PS:您可以将任何其他列位置作为此 awk 命令中的 beg
参数