我正在尝试挑选某些列中具有特定值的行并将其保存到输出中。我试图用grep这样做。可能吗?
我的数据如下所示:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
melon 1 ewtedf wersdf
orange 3 qqqwetr hredfg
我想在第二列中选出值为5的行并将其保存到新的outputfile。
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
我很感激你的帮助!
答案 0 :(得分:7)
可能grep
可能,但执行此操作的适当工具肯定是awk
。您可以使用
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
的{{1}}选项:
awk
如果您需要保留文件的第一行,因为它包含表的标题,请使用跟踪当前记录的序号的awk -v "key=5" '$2 == key {print($0)}'
变量:
NR
字段分隔符是一个正则表达式,用于定义哪些文本分隔列,可以使用awk 'NR == 1 || $2 == 5'
字段进行修改。例如,如果您的数据位于基本CSV文件中,则过滤器将为
-F
访问awk代码维基,找到一些有用的信息,以便开始学习awk -F", *" '$2 == 5'
。
答案 1 :(得分:4)
要在第二个字段5
使用时打印:awk '$2==5' file
答案 2 :(得分:0)
尝试一下:
grep '^[^\s]\+\s5.*$' file.txt
模式查找行的开头,后跟多个非空格字符,后跟空格,后跟5,后跟任意数量的字符,然后是eol。
答案 3 :(得分:0)
您可以获得以下命令。
$ cat data.txt
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
melon 1 ewtedf wersdf
orange 3 qqqwetr hredfg
grape 55 kkkkkkk aaaaaa
$ grep -E '[^ ]+ +5 .*' data.txt > output.txt
$ cat output.txt
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
您只能使用grep
命令获得答案。
但我强烈建议您使用awk
命令。
答案 4 :(得分:-2)
这样做的简单方法是:
grep '5' MyDataFile
结果:
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf
要在新文件中捕获它:
grep '5' MyDataFile > newfile
注意:会在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"
<强>输出:强>
$ ./fruit.sh 5 dat/mydata.dat
apple 5 abcdefd ewdsf
peach 5 ewtdsfe wtesdf