将文件的内容与列的增量连接只有 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