2016-02-25 776 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)。

相關問題