2016-02-25 773 views
1

我有一个文件包含每行有大量数据的记录。 例如:使用sed获取前N个字符和后N个字符

:~$ cat filename 
record_1 data_a data_b data_c data_d data_e 123 
record_2 data_a data_b data_c data_d data_e 456 
record_3 data_a data_b data_c data_d data_e 789 

我想用sedgrep获得例如specifc记录在第一N字符和文件中的数据的每一行的最后N字符来查看信息

:~$ grep 'record_1' filename | [some sed command here] 
record_1 123 

是否有sed命令我可以使用或是否有其他方法来获得这种结果?任何帮助是极大的赞赏。

回答

2

使用sed你可以这样做:

sed -rn '/record_1/s/(.{8}).*(.{3})$/\1 \2/p' file 

record_1 123 

如果你想读的第一个和最后一个字段,然后使用:

awk '/record_1/{print $1, $NF}' file 

record_1 123 
+1

解释:Anubhava用'/ record_1 /'跳过'grep'。 “sed”命令中的数字8是您的编号N,3是N的替代值。 –

+1

awk命令完美地工作,谢谢 – ebellefontaine

0

AWK可能会更好,尤其是当所有的记录都是一样的长度,如问题中所示。

awk '{print $1 $n}' filename 

其中n是最后一个字段的编号。 $ 7包含123,$ 6包含data_e等等。

+0

无效的awk语法。 –

+0

更正后,您并不总是需要模式匹配。 –

+0

更好。但是,这些字段将被连接起来,而不是分隔符。 –

0

如果你想提取基于给定尺寸的字符,这里是另一种选择

$ s=8;e=3; paste <(cut -c1-$s file) <(rev file | cut -c1-$e | rev) 

record_1  123 
record_2  456 
record_3  789 

指定从s(馅饼)尺寸为E(ND)。

相关问题