我试图找出某些列中具有特定值的行并将其保存到输出中.我试图用grep这样做.可能吗?
我的数据如下所示:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
melon 1 ewtedf wersdf
orange 3 qqqwetr hredfg
Run Code Online (Sandbox Code Playgroud)
我想在第二列中挑选出值为5的行并将其保存到新的outputfile中.
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
Run Code Online (Sandbox Code Playgroud)
我很感激你的帮助!
这可能是可能的,grep但绝对可以使用足够的工具来执行此操作awk.您可以过滤第二列上每行5的行
awk '$2 == 5'
Run Code Online (Sandbox Code Playgroud)
awk将其输入分为记录(通常是一行)和字段(通常是一列),并对符合特定条件的记录执行操作.这里
awk '$2 == 5'
Run Code Online (Sandbox Code Playgroud)
是一个简短的表格
awk '$2 == 5 {print($0)}'
Run Code Online (Sandbox Code Playgroud)
转化为
For each record, if the second field ($2) is 5, print the full record ($0).
Run Code Online (Sandbox Code Playgroud)
如果您需要动态选择用于过滤值的键值,请使用以下-v选项awk:
awk -v "key=5" '$2 == key {print($0)}'
Run Code Online (Sandbox Code Playgroud)
如果您需要保留文件的第一行,因为它包含表的标题,请使用NR跟踪当前记录的序号的变量:
awk 'NR == 1 || $2 == 5'
Run Code Online (Sandbox Code Playgroud)
该字段分隔符是一个正则表达式定义哪些文本分开的列,它可以与被修改-F字段.例如,如果您的数据位于基本CSV文件中,则过滤器将是
awk -F", *" '$2 == 5'
Run Code Online (Sandbox Code Playgroud)
访问awk标签wiki,找到一些有用的信息来开始学习awk.
Dav*_*ica -2
简单的方法是:
grep '5' MyDataFile
Run Code Online (Sandbox Code Playgroud)
结果:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
Run Code Online (Sandbox Code Playgroud)
要将其捕获到新文件中:
grep '5' MyDataFile > newfile
Run Code Online (Sandbox Code Playgroud)
注意:这将在 MyDataFile 中的任何位置找到 5。为了限制第二列,一个简短的脚本就可以满足您的需求。如果您只想将其限制为第二列,则可以使用如下所示的快速脚本。用法:script number datafile:
#!/bin/bash
while read -r fruit num stuff || [ -n "$stuff" ]; do
[ "$num" -eq "$1" ] && printf "%s %s %s\n" "$fruit" "$num" "$stuff"
done <"$2"
Run Code Online (Sandbox Code Playgroud)
输出:
$ ./fruit.sh 5 dat/mydata.dat
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
Run Code Online (Sandbox Code Playgroud)