Perl 如何通过以下方式使用awk从制表符分隔的大文件中提取信息?
输入 现在,我想从第3列中检索>=50的信息以及第1列中相应的字母 输出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}
试试这款单衬里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