如何确定每三行是否有所需的字母数?

How to determine if every three lines has the desired number of letters?

我有一个大数据集,想检查每三行是否有所需的碱基数。

示例:

line 1
line 2
ATTGAC
line 4
line 5
TTCGGATC
line 7
line 8
GGTCAA

所以第 6 行包含 8 个碱基而不是 6 个。如果是这种情况,我希望我的脚本停止。

听起来像是 awk 的工作:

awk 'NR % 3 == 0 && length([=10=]) != 6 { print "line " NR " is the wrong length"; exit }' file

当记录号NR为3的倍数且行长不为6时,打印信息并退出

示例的输出(假设所有这些空行不应该存在):

$ awk 'NR % 3 == 0 && length([=11=]) != 6 { print "line " NR " is the wrong length"; exit }' file
line 6 is the wrong length

您可以使用 ${#VarName} 确定 Bash 变量中的字符数。

如果你只想检查是否有任何行超过 6 个字符,你可以使用 wc -L 来给你最大行长度。要仅抓取每三行,可以将 sed 与 n~m 一起使用(从第 n 行开始的每第 m 行)。 这一行 returns 第 3、6、9 行的最大行长度,...

sed -n '0~3p' foo | wc -L