1

ファイルがあり、最初の 33 行と最後の 6 行を切り取りたいと思います。私がやろうとしているのは、ファイル全体を cat コマンド (cat ファイル) で取得し、「head」コマンドと「tail」コマンドを使用してそれらの部分を削除することですが、その方法がわかりません。例(これは単なるアイデアです)

cat file - head -n 33 file - tail -n 6 file

どうすればいいですか?「sed」(どのように)でそれを行うことは可能ですか?前もって感謝します。

4

4 に答える 4

3

これはおそらくあなたが望むものです:

$ tail -n +34 file | head -n -6

を参照してくださいtail

-n, --lines=K は、最後の 10 行ではなく、最後の K 行を出力します。または -n +K を使用して、K 番目から始まる行を出力します。

head

-n, --lines=[-]K 最初の 10 行ではなく、最初の K 行を印刷します。先頭に「-」を付けると、各ファイルの最後の K 行を除くすべてを出力します

マンページ。

例:

$ cat file
one
two
three
four
five
six
seven
eight

$ tail -n +4 file | head -n -2
four
five
six

は必要ないことに注意してください( UUOCcatを参照)。

于 2013-04-20T09:07:59.663 に答える
2

最初に合計行数を数え、次に中間部分を出力します: (ファイルを 2 回読み取ります)

l=$(wc -l file)
awk -v l="$l" 'NR>33&&NR<l-6' file

または、ファイルを配列にロードしてから、必要な行を出力します:(ファイルを1回読み取ります)

awk '{a[NR]=$0}END{for(i=34;i<NR-6;i++)print a[i]}' file

または頭で awk 、このようにあまり考えないでください: (ファイルを2回読む) :

awk 'NR>33' file|head -n-6
于 2013-04-20T00:52:45.130 に答える
1

これはうまくいくかもしれません(GNU sed):

sed '1,33d;:a;$d;N;s/\n/&/6;Ta;P;D' file
于 2013-04-20T19:16:51.773 に答える