Linux 如何检查文件的第一列是否等于一个值

Linux 如何检查文件的第一列是否等于一个值,linux,bash,shell,Linux,Bash,Shell,我正在使用awk'{if((echo$1 | cut-c1-3 align_1.da)eq“chr”)打印$1、$2、$3、$4、$5、$6}'align_1.da>align_1.dat查看align_1.da文件中每行的第一列是否等于“chr”,以及是否将其放入align_1.dat中。然而,我得到了一个语法错误,可以一个雅尔帮助吗 输入格式: chr11 75781924 0 chr5 98293255 16 asi:3 4454545 2 as

我正在使用
awk'{if((echo$1 | cut-c1-3 align_1.da)eq“chr”)打印$1、$2、$3、$4、$5、$6}'align_1.da>align_1.dat
查看align_1.da文件中每行的第一列是否等于“chr”,以及是否将其放入align_1.dat中。然而,我得到了一个语法错误,可以一个雅尔帮助吗

输入格式:

          chr11 75781924 0 chr5 98293255 16

          asi:3 4454545  2 asi:5. 643356 16

          chr8 8201901 0 chr11 80828426 16
错误:

           awk: cmd. line:1: {if((echo $1 | cut -c1-3 align_1.da) eq "chr") 
           print $1,$2,$3,$4,$5,$6}
           awk: cmd. line:1:                ^ syntax error
           awk: cmd. line:1: {if((echo $1 | cut -c1-3 align_1.da) eq "chr") 
           print $1,$2,$3,$4,$5,$6}
           awk: cmd. line:1:                                 ^ syntax error
           awk: cmd. line:1: {if((echo $1 | cut -c1-3 align_1.da) eq "chr") 
           print $1,$2,$3,$4,$5,$6}
           awk: cmd. line:1:                                      ^ syntax error
           awk: cmd. line:1: {if((echo $1 | cut -c1-3 align_1.da) eq "chr") 
           print $1,$2,$3,$4,$5,$6}
           awk: cmd. line:1:                                                ^ syntax error
           awk: cmd. line:1: {if((echo $1 | cut -c1-3 align_1.da) eq "chr") 
           print $1,$2,$3,$4,$5,$6}
           awk: cmd. line:1:                                                                      ^ syntax error

您正试图在awk脚本中使用cut的输出。Awk是一种解释脚本语言,它将读取您的脚本,然后在自己的进程中运行,
cut
是与Awk完全分离的另一个程序。有几种方法可以从awk内部使用外部进程的输出,但在这种情况下没有必要,因为我们可以使用substr()函数来执行与cut完全相同的操作:

awk '(substr($1, 1, 3) == "chr") {print $1,$2,$3,$4,$5,$6}' align_1.da  > align_1.dat

包括样本输入,样本输出,错误,否则你会得到更多的反对票和更少的答案。编写代码,不要链接图像。如果出于某种原因,我们想将代码或错误与其他内容进行比较,我们如何复制代码或错误?请阅读。好的,将其添加到图像中。我找到了一个递归解决方案,但我想知道是否有一种方法可以直接检查这一点,而无需检查每一行(因为我处理的文件平均有1亿行)。哦,非常感谢!我不知道bash有一个substr func。实际上是awk有substr()函数。单引号之间的所有内容都是awk脚本。外部的一切都是bash,所以实际上我们只使用bash运行awk,然后将输出从awk重定向到新文件。哦,好的,你知道awk中是否支持=~吗?=~就像其他语言中的“匹配正则表达式”中一样,~在awk中,所以你可以编写类似“($1~/[0-9]+/){print}'以获取第一列包含数字的所有记录。