如何将文件的内容与列的最后一个数字的增量连接起来
how to concatenate the content of a file with a increment of last number of the column
我有一个包含一些内容的文件,需要重复第 n 次并增加最后一列号的增量。
Input content of a file:
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
Expected output:
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
TCTA 7 ccta TCTA 2
TCTA 8 ccta TCTA 2
TCTA 9 ccta TCTA 2
TCTA 10 ccta TCTA 2
TCTA 11 ccta TCTA 2
TCTA 12 ccta TCTA 2
TCTA 13 ccta TCTA 2
TCTA 14 ccta TCTA 2
TCTA 15 ccta TCTA 2
TCTA 16 ccta TCTA 2
TCTA 17 ccta TCTA 2
TCTA 7 ccta TCTA 3
TCTA 8 ccta TCTA 3
TCTA 9 ccta TCTA 3
TCTA 10 ccta TCTA 3
TCTA 11 ccta TCTA 3
TCTA 12 ccta TCTA 3
TCTA 13 ccta TCTA 3
TCTA 14 ccta TCTA 3
TCTA 15 ccta TCTA 3
TCTA 16 ccta TCTA 3
TCTA 17 ccta TCTA 3
TCTA 7 ccta TCTA n
TCTA 8 ccta TCTA n
TCTA 9 ccta TCTA n
TCTA 10 ccta TCTA n
TCTA 11 ccta TCTA n
TCTA 12 ccta TCTA n
TCTA 13 ccta TCTA n
TCTA 14 ccta TCTA n
TCTA 15 ccta TCTA n
TCTA 16 ccta TCTA n
TCTA 17 ccta TCTA n
我尝试了以下但无法使最后一列递增第 n 次。
for i in {1..5};do
cat file.txt >> out.txt
done
我需要最后一列增加第n次。
使用 gnu-awk 解决方案:
awk -v n=3 '
{
rec = rec [=10=] RS
}
1
END {
for (i=2; i<=n; ++i)
printf "%s", gensub(/[0-9]+(\n|$)/, i "\1", "g", rec)
}' file
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
TCTA 7 ccta TCTA 2
TCTA 8 ccta TCTA 2
TCTA 9 ccta TCTA 2
TCTA 10 ccta TCTA 2
TCTA 11 ccta TCTA 2
TCTA 12 ccta TCTA 2
TCTA 13 ccta TCTA 2
TCTA 14 ccta TCTA 2
TCTA 15 ccta TCTA 2
TCTA 16 ccta TCTA 2
TCTA 17 ccta TCTA 2
TCTA 7 ccta TCTA 3
TCTA 8 ccta TCTA 3
TCTA 9 ccta TCTA 3
TCTA 10 ccta TCTA 3
TCTA 11 ccta TCTA 3
TCTA 12 ccta TCTA 3
TCTA 13 ccta TCTA 3
TCTA 14 ccta TCTA 3
TCTA 15 ccta TCTA 3
TCTA 16 ccta TCTA 3
TCTA 17 ccta TCTA 3
这可能适合您(GNU 并行和 sed):
parallel -kq sed -E 's/\S+$/$((&+{}))/;s/.*/echo "&"/e' file ::: {0..2}
如果要用增量替换最后一个字段,请使用:
parallel -kq sed -E 's/\S+$/{}/' file ::: {1..3}
我有一个包含一些内容的文件,需要重复第 n 次并增加最后一列号的增量。
Input content of a file:
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
Expected output:
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
TCTA 7 ccta TCTA 2
TCTA 8 ccta TCTA 2
TCTA 9 ccta TCTA 2
TCTA 10 ccta TCTA 2
TCTA 11 ccta TCTA 2
TCTA 12 ccta TCTA 2
TCTA 13 ccta TCTA 2
TCTA 14 ccta TCTA 2
TCTA 15 ccta TCTA 2
TCTA 16 ccta TCTA 2
TCTA 17 ccta TCTA 2
TCTA 7 ccta TCTA 3
TCTA 8 ccta TCTA 3
TCTA 9 ccta TCTA 3
TCTA 10 ccta TCTA 3
TCTA 11 ccta TCTA 3
TCTA 12 ccta TCTA 3
TCTA 13 ccta TCTA 3
TCTA 14 ccta TCTA 3
TCTA 15 ccta TCTA 3
TCTA 16 ccta TCTA 3
TCTA 17 ccta TCTA 3
TCTA 7 ccta TCTA n
TCTA 8 ccta TCTA n
TCTA 9 ccta TCTA n
TCTA 10 ccta TCTA n
TCTA 11 ccta TCTA n
TCTA 12 ccta TCTA n
TCTA 13 ccta TCTA n
TCTA 14 ccta TCTA n
TCTA 15 ccta TCTA n
TCTA 16 ccta TCTA n
TCTA 17 ccta TCTA n
我尝试了以下但无法使最后一列递增第 n 次。
for i in {1..5};do
cat file.txt >> out.txt
done
我需要最后一列增加第n次。
使用 gnu-awk 解决方案:
awk -v n=3 '
{
rec = rec [=10=] RS
}
1
END {
for (i=2; i<=n; ++i)
printf "%s", gensub(/[0-9]+(\n|$)/, i "\1", "g", rec)
}' file
TCTA 7 ccta TCTA 1
TCTA 8 ccta TCTA 1
TCTA 9 ccta TCTA 1
TCTA 10 ccta TCTA 1
TCTA 11 ccta TCTA 1
TCTA 12 ccta TCTA 1
TCTA 13 ccta TCTA 1
TCTA 14 ccta TCTA 1
TCTA 15 ccta TCTA 1
TCTA 16 ccta TCTA 1
TCTA 17 ccta TCTA 1
TCTA 7 ccta TCTA 2
TCTA 8 ccta TCTA 2
TCTA 9 ccta TCTA 2
TCTA 10 ccta TCTA 2
TCTA 11 ccta TCTA 2
TCTA 12 ccta TCTA 2
TCTA 13 ccta TCTA 2
TCTA 14 ccta TCTA 2
TCTA 15 ccta TCTA 2
TCTA 16 ccta TCTA 2
TCTA 17 ccta TCTA 2
TCTA 7 ccta TCTA 3
TCTA 8 ccta TCTA 3
TCTA 9 ccta TCTA 3
TCTA 10 ccta TCTA 3
TCTA 11 ccta TCTA 3
TCTA 12 ccta TCTA 3
TCTA 13 ccta TCTA 3
TCTA 14 ccta TCTA 3
TCTA 15 ccta TCTA 3
TCTA 16 ccta TCTA 3
TCTA 17 ccta TCTA 3
这可能适合您(GNU 并行和 sed):
parallel -kq sed -E 's/\S+$/$((&+{}))/;s/.*/echo "&"/e' file ::: {0..2}
如果要用增量替换最后一个字段,请使用:
parallel -kq sed -E 's/\S+$/{}/' file ::: {1..3}