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'