将文件的内容与列的增量连接只有 1
Concatenate the content of a file with a increment of columns has 1 only
在前面的 post () 行中,我需要帮助解决一些不同的问题。
现在我希望每列都有增量(1 到 5 次)(可以是第 2、第 3 ....nth,肯定会以“1”开始和结束" )除了第一列(可以从 1 开始但以任意数字结束)。
输入文件:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
需要输出:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2
TCTA 15 TCTG 2 TCTA 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3
TCTA 15 TCTG 3 TCTA 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4
TCTA 15 TCTG 4 TCTA 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5
TCTA 15 TCTG 5 TCTA 5
我尝试合并之前 post 的代码,但到目前为止没有成功..
awk -v n=3 '
{
rec = rec [=12=] RS
}
1
END {
for (i=2; i<=n; ++i)
printf "%s", gensub(/[0-9]+(\n|$)/, i "\1", "g", rec)
}' file
这里的问题是它只需要最后一列,但是除了第一列我需要任何列。
请帮忙。
谢谢
输出可能不是那么好看,但最简单的是这样的:
awk -v n=5 '{ for(i=1;i<=n;++i) a[i,NR]=sprintf("%-8s%-4d%-8s%-4d%-8s%-4d",,,,i,,i) }
END { for(i=1;i<=n;++i) for(j=1;j<=NR;++j) print a[i,j] }' file
假设:
- 第一个数字列不包含单个数字
1
- 对于要递增的所有其他列,source/input 列的值为
1
(即,我们只会递增包含单个 1
的列)
- 最终结果:用增量值
替换所有出现的单个数字1
- 事先不知道列数
- 列数可能因行而异
正在修改 OP 的当前 awk
代码以将所有独立 1's
替换为增量值:
awk -v n=5 '
{
rec = rec [=10=] RS
}
1
END {
for (i=2; i<=n; ++i) {
x=gensub(/([^[:digit:]])1([^[:digit:]])/, "\1" i "\2", "g", rec)
printf "%s", gensub(/([^[:digit:]])1([^[:digit:]])/, "\1" i "\2", "g", x)
}
}' file
其中:
([^[:digit:]])1([^[:digit:]])
匹配一个非数字字符(捕获组 #1)+ 单个 1
+ 一个非数字字符(捕获组 #2)
"\1" i "\2"
- 替换为捕获组 #1 + 当前增量值(在本例中为 i=2..5
)+ 捕获组 #2
- 我们执行 2x
gensub()
调用来解决连续数字列包含单个 1
的问题(注意: 可能有一种方法可以通过单个函数调用执行此操作,但我现在一片空白......欢迎社区 awkers
的建议)
使用修改后的输入文件演示连续数字列问题:
$ cat file
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
这会生成:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2 2 2
TCTA 15 TCTG 2 TCTA 2 2 2 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3 3 3
TCTA 15 TCTG 3 TCTA 3 3 3 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4 4 4
TCTA 15 TCTG 4 TCTA 4 4 4 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5 5 5
TCTA 15 TCTG 5 TCTA 5 5 5 5
在前面的 post (
现在我希望每列都有增量(1 到 5 次)(可以是第 2、第 3 ....nth,肯定会以“1”开始和结束" )除了第一列(可以从 1 开始但以任意数字结束)。
输入文件:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
需要输出:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1
TCTA 15 TCTG 1 TCTA 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2
TCTA 15 TCTG 2 TCTA 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3
TCTA 15 TCTG 3 TCTA 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4
TCTA 15 TCTG 4 TCTA 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5
TCTA 15 TCTG 5 TCTA 5
我尝试合并之前 post 的代码,但到目前为止没有成功..
awk -v n=3 '
{
rec = rec [=12=] RS
}
1
END {
for (i=2; i<=n; ++i)
printf "%s", gensub(/[0-9]+(\n|$)/, i "\1", "g", rec)
}' file
这里的问题是它只需要最后一列,但是除了第一列我需要任何列。
请帮忙。
谢谢
输出可能不是那么好看,但最简单的是这样的:
awk -v n=5 '{ for(i=1;i<=n;++i) a[i,NR]=sprintf("%-8s%-4d%-8s%-4d%-8s%-4d",,,,i,,i) }
END { for(i=1;i<=n;++i) for(j=1;j<=NR;++j) print a[i,j] }' file
假设:
- 第一个数字列不包含单个数字
1
- 对于要递增的所有其他列,source/input 列的值为
1
(即,我们只会递增包含单个1
的列) - 最终结果:用增量值 替换所有出现的单个数字
- 事先不知道列数
- 列数可能因行而异
1
正在修改 OP 的当前 awk
代码以将所有独立 1's
替换为增量值:
awk -v n=5 '
{
rec = rec [=10=] RS
}
1
END {
for (i=2; i<=n; ++i) {
x=gensub(/([^[:digit:]])1([^[:digit:]])/, "\1" i "\2", "g", rec)
printf "%s", gensub(/([^[:digit:]])1([^[:digit:]])/, "\1" i "\2", "g", x)
}
}' file
其中:
([^[:digit:]])1([^[:digit:]])
匹配一个非数字字符(捕获组 #1)+ 单个1
+ 一个非数字字符(捕获组 #2)"\1" i "\2"
- 替换为捕获组 #1 + 当前增量值(在本例中为i=2..5
)+ 捕获组 #2- 我们执行 2x
gensub()
调用来解决连续数字列包含单个1
的问题(注意: 可能有一种方法可以通过单个函数调用执行此操作,但我现在一片空白......欢迎社区awkers
的建议)
使用修改后的输入文件演示连续数字列问题:
$ cat file
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
这会生成:
TCTA 3 TCTG 1 TCTA 1
TCTA 4 TCTG 1 TCTA 1
TCTA 5 TCTG 1 TCTA 1
TCTA 6 TCTG 1 TCTA 1
TCTA 7 TCTG 1 TCTA 1
TCTA 8 TCTG 1 TCTA 1
TCTA 9 TCTG 1 TCTA 1
TCTA 10 TCTG 1 TCTA 1
TCTA 11 TCTG 1 TCTA 1
TCTA 12 TCTG 1 TCTA 1
TCTA 13 TCTG 1 TCTA 1
TCTA 14 TCTG 1 TCTA 1 1 1
TCTA 15 TCTG 1 TCTA 1 1 1 1
TCTA 3 TCTG 2 TCTA 2
TCTA 4 TCTG 2 TCTA 2
TCTA 5 TCTG 2 TCTA 2
TCTA 6 TCTG 2 TCTA 2
TCTA 7 TCTG 2 TCTA 2
TCTA 8 TCTG 2 TCTA 2
TCTA 9 TCTG 2 TCTA 2
TCTA 10 TCTG 2 TCTA 2
TCTA 11 TCTG 2 TCTA 2
TCTA 12 TCTG 2 TCTA 2
TCTA 13 TCTG 2 TCTA 2
TCTA 14 TCTG 2 TCTA 2 2 2
TCTA 15 TCTG 2 TCTA 2 2 2 2
TCTA 3 TCTG 3 TCTA 3
TCTA 4 TCTG 3 TCTA 3
TCTA 5 TCTG 3 TCTA 3
TCTA 6 TCTG 3 TCTA 3
TCTA 7 TCTG 3 TCTA 3
TCTA 8 TCTG 3 TCTA 3
TCTA 9 TCTG 3 TCTA 3
TCTA 10 TCTG 3 TCTA 3
TCTA 11 TCTG 3 TCTA 3
TCTA 12 TCTG 3 TCTA 3
TCTA 13 TCTG 3 TCTA 3
TCTA 14 TCTG 3 TCTA 3 3 3
TCTA 15 TCTG 3 TCTA 3 3 3 3
TCTA 3 TCTG 4 TCTA 4
TCTA 4 TCTG 4 TCTA 4
TCTA 5 TCTG 4 TCTA 4
TCTA 6 TCTG 4 TCTA 4
TCTA 7 TCTG 4 TCTA 4
TCTA 8 TCTG 4 TCTA 4
TCTA 9 TCTG 4 TCTA 4
TCTA 10 TCTG 4 TCTA 4
TCTA 11 TCTG 4 TCTA 4
TCTA 12 TCTG 4 TCTA 4
TCTA 13 TCTG 4 TCTA 4
TCTA 14 TCTG 4 TCTA 4 4 4
TCTA 15 TCTG 4 TCTA 4 4 4 4
TCTA 3 TCTG 5 TCTA 5
TCTA 4 TCTG 5 TCTA 5
TCTA 5 TCTG 5 TCTA 5
TCTA 6 TCTG 5 TCTA 5
TCTA 7 TCTG 5 TCTA 5
TCTA 8 TCTG 5 TCTA 5
TCTA 9 TCTG 5 TCTA 5
TCTA 10 TCTG 5 TCTA 5
TCTA 11 TCTG 5 TCTA 5
TCTA 12 TCTG 5 TCTA 5
TCTA 13 TCTG 5 TCTA 5
TCTA 14 TCTG 5 TCTA 5 5 5
TCTA 15 TCTG 5 TCTA 5 5 5 5