我想对1D数组的行进行编号,使其包含两个字段,即数字" \ t" DATA;但是,我想跳过编号并为包含已定义字符的行输入空白条目(在我的情况下' - ')。我理解这可能与 awk 有关,但我不确定如何实现它。
示例输入:
A
G
T
C
-
A
G
-
T
C
示例输出:
1 \t A
2 \t G
3 \t T
4 \t C
\t -
5 \t A
6 \t G
\t -
7 \t T
8 \t C
(为了清晰起见,添加了空格)
答案 0 :(得分:1)
awk中的另一个人。它使用awk内部变量NR
并从中减去不匹配的数量(在变量c
中):
$ awk 'BEGIN{OFS="\t"}{print (/-/ && ++c?"":NR-c) OFS $0}' file
1 A
2 G
3 T
4 C
-
5 A
6 G
-
7 T
8 C
答案 1 :(得分:0)
您可以使用awk:
$ echo "$txt" | awk '/A|G|T|C/{printf "%s\t%s\n", ++i, $1; next} {print "\t" $1}'
1 A
2 G
3 T
4 C
-
5 A
6 G
-
7 T
8 C
这与示例很好地配合。如果你有更复杂的输入,你的正则表达式或正则表达式和逻辑的组合可能需要加强。你明白了......
如果您希望awk
仅增加计数器并打印,如果这四个字母之一存在完全匹配,请使用关联数组:
$ echo "$txt" | awk 'BEGIN { split("AGTC",x,""); for (e in x) a[x[e]] }
$1 in a {print ++i "\t" $1; next}
{print "\t" $1}'