awk - grep:在特定列中保留具有特定字符串的行

标签 awk sed grep

我试图挑选出在特定列中具有特定值的行并将其保存到输出中。我正在尝试用 grep 来做到这一点。是否可以?

我的数据是这样的:

apple   5   abcdefd  ewdsf
peach   5   ewtdsfe  wtesdf
melon   1   ewtedf   wersdf
orange  3   qqqwetr  hredfg

我想挑选出第二列中值为 5 的行并将其保存到新的输出文件中。
apple   5   abcdefd  ewdsf
peach   5   ewtdsfe  wtesdf

我将不胜感激!

最佳答案

使用 grep 可能是可能的但执行此操作的合适工具肯定是 awk .您可以过滤第二列上有 5 的每一行

awk '$2 == 5'

解释
awk将它的输入拆分为记录(通常是一行)和字段(通常是一列),并对符合特定条件的记录执行操作。这里
awk '$2 == 5'

是一个简短的形式
awk '$2 == 5 {print($0)}'

这意味着
For each record, if the second field ($2) is 5, print the full record ($0).

变化

如果您需要动态选择用于过滤值的键值,请使用 -v awk 的选项:
awk -v "key=5" '$2 == key {print($0)}'

如果您需要保留文件的第一行,因为它包含表的标题,请使用 NR跟踪当前记录的序号的变量:
awk 'NR == 1 || $2 == 5'

字段分隔符是一个正则表达式,定义哪些文本分隔列,可以用 -F 修改。 field 。例如,如果您的数据位于基本 CSV 文件中,则过滤器将是
awk -F", *" '$2 == 5'

访问 tag wiki 找到一些有用的信息开始学习awk .

关于awk - grep:在特定列中保留具有特定字符串的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26148546/

相关文章:

regex - 我如何在 sed 的正则表达式中包含换行搜索

linux - 使用 cat 和 grep 打印行及其编号但同时忽略空行

regex - 如何替换文件中的版本号?

regex - Grep 正则表达式不适用于 Windows 上的 Cygwin

regex - Perl 的 grep 函数如何与正则表达式一起工作?

linux - 将字段 'N' 打印到行尾

linux - 在给定输入的情况下查找一行并在 csv 文件中修改它

linux - 如何比较unix中不同列的文件?

linux - 使用 awk 或 sed 替换 _ 之前的字符串

regex - sed 查找并替换 fastq 正则表达式