[英]Extract domain then paste into the same line using sed/awk/grep/perl
[英]Extract K-th Line from Chunks Using Sed/AWK/Perl
我有一些看起來像這樣的數據。 它分為四行。 每個塊均以@
字符開頭。
@SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27
AAAAAAAAAAAAAAAAAAAAAAAAAAA
+SRR037212.1 FC30L5TAA_102708:7:1:741:1355 length=27
::::::::::::::::::::::::;;8
@SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27
TATAACCAGAAAGTTACAAGTAAACAC
+SRR037212.2 FC30L5TAA_102708:7:1:1045:1765 length=27
88888888888888888888888888
我要做的是提取每個塊的最后一行。 屈服:
::::::::::::::::::::::::;;8
888888888888888888888888888
請注意,塊的最后一行可以包含任何標准ASCII字符,包括@
。
有沒有行之有效的辦法?
以下sed命令將在圖案后打印第三行:
sed -n '/^@/{n;n;n;p}' file.txt
如果沒有空行:
perl -ne 'print if $. % 4 == 0' file
$ awk 'BEGIN{RS="@";FS="\n"}{print $4 } ' file
::::::::::::::::::::::::;;8
88888888888888888888888888
如果您總是將這4行放在塊中,則可以采用其他方法
$ ruby -ne 'print if $.%4==0' file
::::::::::::::::::::::::;;8
88888888888888888888888888
$ awk 'NR%4==0' file
::::::::::::::::::::::::;;8
88888888888888888888888888
似乎您的行總是在以“ +”開頭的行之后,所以
$ awk '/^\+/{getline;print}' file
::::::::::::::::::::::::;;8
88888888888888888888888888
$ ruby -ne 'gets && print if /^\+/' file
::::::::::::::::::::::::;;8
88888888888888888888888888
這會在以@
開頭的行之前以及最后一行的行之前打印。 它可以處理大小不一致的塊,但是假定只有塊開頭以@
開頭。
sed -ne '1d;$p;/^@/!{x;d};/^@/{x;p}' file
一些解釋是為了:
1d
$p
x;d
x;p
這類似於狗狗的答案
awk '/^@/ {mark = NR} NR == mark + 3 {print}' inputfile
並且,就像該答案一樣,無論每個塊中的行數如何(只要至少有4行),它都將起作用。
但是,該答案的直接類似物為:
awk '/^@/ {next; next; next; print}' inputfile
這可以使用grep輕松完成
grep -A 1 '^@' ./infile
這可能對您有用(GNU sed):
sed '/^@/,+2d' file
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.