如果字段以左括号开头,则awk添加右括号

时间:2016-05-21 15:03:18

标签: awk

我有awk似乎很直白,但我似乎遇到了问题。如果$5(开头,则在下面的文件中,然后在该字符串中添加)。但是if $ 5 does not start with athen nothing is done. The out is separated by a tab. The awk is almost right but I am not sure how to add the condition to only add aif the field starts with a(`。谢谢:)。

文件

chr7 100490775 100491863 chr7:100490775-100491863 ACHE
chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769
chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1
chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1

awk尝试

awk -v OFS='\t' '{print $1,$2,$3,$4,""$5")"}' file

当前输出

chr7    100490775   100491863   chr7:100490775-100491863    ACHE)
chr7    100488568   100488719   chr7:100488568-100488719    ACHE;DJ051769)
chr1    159174749   159174770   chr1:159174749-159174770    (ACKR1)
chr1    159175223   159176240   chr1:159175223-159176240    (ACKR1)

所需的输出(第1行和第2行没有任何操作,但第3行和第4行添加了)

chr7    100490775   100491863   chr7:100490775-100491863    ACHE
chr7    100488568   100488719   chr7:100488568-100488719    ACHE;DJ051769
chr1    159174749   159174770   chr1:159174749-159174770    (ACKR1)
chr1    159175223   159176240   chr1:159175223-159176240    (ACKR1)

1 个答案:

答案 0 :(得分:2)

new_env <- environment()
new_env$number <- 5
new_env$number
get("number", envir = new_env)
assign("n", 1:10, envir = new_env)
new_env$n

检查第5个字段的第一个字符。如果$ awk -v OFS='\t' '{p = substr($5,1,1)=="(" ? ")" : ""; $5=$5 p}1' mp.txt chr7 100490775 100491863 chr7:100490775-100491863 ACHE chr7 100488568 100488719 chr7:100488568-100488719 ACHE;DJ051769 chr1 159174749 159174770 chr1:159174749-159174770 (ACKR1) chr1 159175223 159176240 chr1:159175223-159176240 (ACKR1) 在末尾附加(,则附加空字符串。

通过在所有情况下附加某些东西(其中一个东西是“没有”:),我们强制awk用定义的(制表符)输出分隔符重新构建记录,这使我们不必打印单个字段。尾随)充当始终为真的模式,其默认操作只是打印重构的行。