Bash 如何输出具有特定列号(非字段值)的数据?
我正在分析我的研究数据,列号如下Bash 如何输出具有特定列号(非字段值)的数据?,bash,Bash,我正在分析我的研究数据,列号如下 .... 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
....
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脚本来列出这些数据
注意:我的数据有超过百万行。我需要考虑脚本的效率。任何进一步的帮助都将不胜感激。awk(或者更好的gawk
,如果您有)专门处理这类需要对列格式数据进行操作的任务。使用NF
变量(awk的内置变量都是短大写字母),您可以确定带有“数字字段”(NF
)的行,并打印这些行,例如
awk 'NF == 14 { print }' ./dat.txt
注意awk
是一种面向行的语言,因此这将在条件为真的行上执行块{print}
(在awk
意义上为真)。您需要参考手册了解详细信息,我只是一个awk
用户,而不是专家
awk '{ if (NF == 14) { print } }' inp.txt >> ans.txt
如果没有为给定模式指定命令,Awk将使用默认命令{print$0}。Awk的
NF
变量不提供您需要的所有信息吗?例如Awk'{print$14}./dat.txt
@jenesaisquoi当有14列时,他想打印整行,不仅仅是打印列14。StackOverflow不是免费的编码服务。请更新您的问题,以显示您已在某个应用程序中尝试过的内容。有关更多信息,请参阅,并使用:)@Barmar啊,我明白了,我只是认为OP不熟悉awk
,因此他们需要类似awk'NF==14{print}./dat.txt
的东西,这应该也能起作用:awk'NF==14./dat.txt
awk 'NF == 14'