Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 如何通过以下方式使用awk从制表符分隔的大文件中提取信息?_Perl_Sed_Awk - Fatal编程技术网

Perl 如何通过以下方式使用awk从制表符分隔的大文件中提取信息?

Perl 如何通过以下方式使用awk从制表符分隔的大文件中提取信息?,perl,sed,awk,Perl,Sed,Awk,输入 现在,我想从第3列中检索>=50的信息以及第1列中相应的字母 输出 试试这款单衬里awk: awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' file 与您的文件一起: kent$ cat f a 1 20 4 50 b 5 20 2 90 r 5 70 kent$ awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}

输入

现在,我想从第3列中检索>=50的信息以及第1列中相应的字母

输出


试试这款单衬里awk:

awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' file
与您的文件一起:

kent$  cat f
a   1   20
    4   50
b   5   20
    2   90
r   5   70

kent$  awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' f
a   4   50
b   2   90
r   5   70
编辑


请解释一下命令是如何工作的…你不明白哪一部分?它能解决你的问题吗?它能用1美元{k=$1}$NFI本以为$1不存在时就不存在了。“很惊讶OP说它起作用了。”埃德蒙顿,我在第1版中就是这样发布的。选中NF==3,之后,我观察了输入文件一段时间,我认为缺少的$1将被一个空格替换。所以我改变了主意您说过希望>50,但发布了>=50的输出。请澄清。这确实是一个非常非常简单的“awk”问题。你知道awk吗?你试过学习awk吗?如果是的话,你到底遇到了什么问题?其中一个要求是对您所询问的编程语言有一定的了解。这可能是绝对最少的知识,但需要一些知识。这是一个关于。
awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' file
kent$  cat f
a   1   20
    4   50
b   5   20
    2   90
r   5   70

kent$  awk -F'\t' -v OFS="\t" '$1!=" "{k=$1}$NF<50{next}$1=k' f
a   4   50
b   2   90
r   5   70
$1!=" "{k=$1}     if $1 is not " ", assign $1 to var k
$NF<50{next}      if the last col ($NF) < 50, stop processing, read next line
$1=k              otherwise, assign k to $1, and print the line.
$ cat file
a       1       20
        4       50
b       5       20
        2       90
r       5       70

$ awk 'BEGIN{FS=OFS="\t"} {if ($1=="") $1=k; else k=$1} $NF>50' file
b       2       90
r       5       70

$ awk 'BEGIN{FS=OFS="\t"} {if ($1=="") $1=k; else k=$1} $NF>=50' file
a       4       50
b       2       90
r       5       70