我有一个像这样的.txt文件:
ENST00000000442 64073050 64074640 64073208 64074651 ESRRA
ENST00000000233 127228399 127228552 ARF5
ENST00000003100 91763679 91763844 CYP51A1
我想只得到每行的最后3列。 正如你所看到的那样,在2行之间有一些空行必须被忽略。这是我想要的输出:
64073208 64074651 ESRRA
127228399 127228552 ARF5
91763679 91763844 CYP51A1
awk '/a/ {print $1- "\t" $-2 "\t" $-3}' file.txt.
它不会返回我想要的东西。你知道怎么纠正命令吗?
答案 0 :(得分:4)
关注awk
可能对您有帮助。
awk 'NF{print $(NF-2),$(NF-1),$NF}' OFS="\t" Input_file
输出如下。
64073208 64074651 ESRRA
127228399 127228552 ARF5
91763679 91763844 CYP51A1
编辑: 现在添加命令说明。(注意以下命令仅用于解释目的,只应在命令上方运行才能获得结果)
awk 'NF ###Checking here condition NF(where NF is a out of the box variable for awk which tells number of fields in a line of a Input_file which is being read).
###So checking here if a line is NOT NULL or having number of fields value, if yes then do following.
{
print $(NF-2),$(NF-1),$NF###Printing values of $(NF-2) which means 3rd last field from current line then $(NF-1) 2nd last field from line and $NF means last field of current line.
}
' OFS="\t" Input_file ###Setting OFS(output field separator) as TAB here and mentioning the Input_file here.
答案 1 :(得分:0)
您也可以使用sed
sed -E '/^$/d;s/.*\t(([^\t]*[\t|$]){2})/\1/' infile
答案 2 :(得分:0)
有一些管道:
$ cat file | tr -s '\n' | rev | cut -f 1-3 | rev
64073208 64074651 ESRRA
127228399 127228552 ARF5
91763679 91763844 CYP51A1
首先,cat
文件tr
挤出已重复的\n
以消除空行。然后rev
删除行cut
前三个字段并再次反转。您可以使用第一个cat
替换无用的rev
。