Rhe*_*hea 13 command-line text-processing
我想计算“X”之间的线数。这只是一个例子;我必须将代码应用于复杂的生物学结果。如果您能建议一些命令,最好使用awk,grep或者sed我熟悉这些命令,我将不胜感激。
例子:
X
Y
Y
Y
X
Y
Y
Y
Y
X
Y
X
Run Code Online (Sandbox Code Playgroud)
期望输出:
3
4
1
Run Code Online (Sandbox Code Playgroud)
mur*_*uru 13
与awk:
$ awk '!/X/{count++}/X/{print count; count = 0}' input
3
4
1
Run Code Online (Sandbox Code Playgroud)
为不包含的每一行增加一个计数X;打印并重置包含X.
Joh*_*024 12
$ awk '/X/ && prev{print NR-prev-1} /X/{prev=NR}' file
3
4
1
Run Code Online (Sandbox Code Playgroud)
这个怎么运作:
awk 隐式地逐行读取输入文件。
/X/ && prev{print NR-prev-1}
对于包含X并且如果我们之前已经为 赋值的任何行prev,则打印出当前行的编号NR,减去prev减一。
/X/{prev=NR}
对于包含 的任何行,X将变量prev设置为当前行号NR。
另一种awk适用于 OP 样本数据的简单方法,如果X不在第一个甚至最后一个或重复的 X 中。
awk -v RS='X' 'NF{print NF}' infile
Run Code Online (Sandbox Code Playgroud)
当每一行中只有一个字段且默认 FS 有任何空格时,上面是正确的,否则下面在一般情况下被修改为按行计数。您可以在那里输入您的PATTERN代替X。
awk -F'\n' -v RS='X' 'NF>2{print NF-2}'
Run Code Online (Sandbox Code Playgroud)
样本输入:
X
Y YYY Y
YY
YY Y YY YY Y Y
X
Y Y Y
X
Y
Y
X
X
Run Code Online (Sandbox Code Playgroud)
输出是:
3
1
2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2153 次 |
| 最近记录: |