我正在用下面显示的各个列号分析我的研究数据。
....
FRAM_# 9100 2275(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.962 13599 H 0.942
FRAM_# 9200 2300(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.983 13599 H 0.977
FRAM_# 9300 2325(fs) CN= 0 PRMRYTGT 13598 O 13600 H 1.022 13599 H 1.022
FRAM_# 9400 2350(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.962 13599 H 0.926
FRAM_# 9500 2375(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.985 13599 H 1.030 8279 CA 3.185
FRAM_# 9600 2400(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.985 13599 H 0.949 8279 CA 3.149
FRAM_# 9700 2425(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.984 13599 H 1.021 8279 CA 3.062
FRAM_# 9800 2450(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.999 13599 H 1.017
FRAM_# 9900 2475(fs) CN= 0 PRMRYTGT 13598 O 13600 H 1.007
....
每行的列号可能不同。每一列均被一个或多个空格分隔。我只想显示列号为14的那些数据,例如
....
FRAM_# 9100 2275(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.962 13599 H 0.942
FRAM_# 9200 2300(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.983 13599 H 0.977
FRAM_# 9300 2325(fs) CN= 0 PRMRYTGT 13598 O 13600 H 1.022 13599 H 1.022
FRAM_# 9400 2350(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.962 13599 H 0.926
FRAM_# 9800 2450(fs) CN= 0 PRMRYTGT 13598 O 13600 H 0.999 13599 H 1.017
....
如何运行BASH脚本列出这些数据?
注意:我的数据有超过百万行。我需要考虑脚本的效率。任何进一步的帮助将不胜感激。
答案 0 :(得分:0)
awk
(或更好的gawk
)专门处理诸如此类的任务,需要对列格式的数据进行操作。使用NF
变量(awk的内置变量都是短大写字母的气动符号),您可以确定带有“数字字段”(NF
)的行,并打印出来,例如。
awk 'NF == 14 { print }' ./dat.txt
注意awk
是面向行的语言,因此这将在条件为真的行(在{ print }
为真的情况下)执行块awk
。您需要参考手册以获取详细信息,我只是awk
用户,而不是专家。
答案 1 :(得分:0)
awk '{ if (NF == 14) { print } }' inp.txt >> ans.txt
答案 2 :(得分:0)
awk 'NF == 14'
如果未为给定模式指定任何命令,则Awk将使用默认命令{print $ 0}。