是否可以使用grep
将文件中的标题行与过滤器的输出连接起来?也许使用cat
命令或GNU的coreutils中的其他东西?
特别是,我有一个制表符分隔文件,大致如下所示:
var1 var2 var3
1 MT 500
30 CA 40000
10 NV 1240
40 TX 500
30 UT 35000
10 AZ 1405
35 CO 500
15 UT 9000
1 NV 1505
30 CA 40000
10 NV 1240
我想从第2行 - N中选择使用grep
包含“CA”的所有行,并使用GNU / Linux将第一行(变量名称)放在输出文件的第一行中命令。
示例的所需输出为:
var1 var2 var3
30 CA 40000
35 CA 65000
15 CA 2500
我可以使用以下代码行选择两组所需的输出。
head -1 filename
grep -E CA filename
我最初的想法是使用cat
组合这些命令的输出,但到目前为止我还没有成功。
答案 0 :(得分:2)
如果您正在运行shell中的命令(包括shell脚本),则可以单独运行每个命令并重定向输出:
head -1 filename > outputfile
grep -E CA filename >> outputfile
第一行将覆盖outputfile,因为单个>被使用了。第二行将附加到outputfile,因为>>用了。
如果你想在一个命令中执行此操作,以下工作在bash:
(head -1 filename && grep -E CA filename) > outputfile
如果您希望输出转到标准输出,请不要使用括号和重定向:
head -1 filename && grep -E CA filename
答案 1 :(得分:1)
目前尚不清楚你在寻找什么,但也许只是:
{ head -1 filename; grep -E CA filename; } > output
或
awk 'NR==1 || /CA/' filename > output
但是对你的问题的另一种解释最好使用sed或awk来解决。 例如,要打印第5-9行和第14行,您可以执行以下操作:
sed -n -e 5,9p -e 14p
或
awk '(NR >=5 && NR <=9) || NR==14'
答案 2 :(得分:0)
我刚遇到一个使用cat <(head -1 filename) <(grep -E CA filename) > outputfile
命令的方法。
<(command)
此网站tldp.org调用{{1}}语法&#34;流程替换。&#34;
我不清楚哪种方法在内存/速度方面更有效,但这是可以测试的。