Sed
如何從fish中的輸入中檢索前N行和最後M行?
我有這樣的輸入:
1 2 3 4 5 6 7 8
而且我想從此輸入中僅檢索 N 第一行和 M 最後一行。
例如,如果 N 為 2,M 為 4,我希望結果為:
1 2 5 6 7 8
線可以重疊,所以如果 N 是 6 並且 M 是 4 我希望輸出等於我的輸入。
我曾嘗試使用 awk,但沒有運氣:
cat input | awk "{if (NR<2 || NR>count - 4) {print}}"
這是一種技術:
$ seq 10 > input $ set N 2; set M 4 $ set wanted (sed $N'q' input; tac input | sed $M'q' | tac) $ printf "%s\n" $wanted
1 2 7 8 9 10
如果
N+M > num_lines
那樣的話,您將使用這種方法得到重複的行。或者,使用 fish 的數組下標:
$ set lines (cat input) $ printf "%s\n" $lines[1..$N] $lines[(math (count $lines) - $M + 1)..-1]
1 2 7 8 9 10
像這樣:
awk 'NR <= 2 || lines - 4 < NR {print}' lines=(wc -l input) input
由於 awk 在文件到達文件末尾之前不可能知道文件中的行數,因此您需要將行數作為變數輸入 awk。