web-dev-qa-db-ja.com

UNIXでファイルのn番目の行からすべての行を表示する方法

N行目から始まるすべての行を表示したい。たとえば、ファイルの3行目と次のすべての行をファイルの終わりまで印刷します。そのためのコマンドはありますか?

29
user3905438

あなたは尾を使うことができます

マンページからの抜粋:

   -n, --lines=K
         output the last K lines, instead of the last 10; or use -n +K to
         output lines starting with the Kth

例えば

tail -n +10 file 

10行目から始まるファイルの内容を出力します

54
sed -n '3,$p' file

Stackoverflowは短いコマンドラインを認識しないため、これは単なるフィラーテキストです。

10
Alain Collins

5行目から表示するには:

awk 'NR>4' file
10

印刷しますが、1行目から2行目を削除します。

sed '1,2d' filename
5
Beta

次のようにawkを使用できます。

awk 'BEGIN{n=5}NR<=n{next}1' file
  • BEGIN{n=5}-ファイル処理を開始する前に、nをスキップする行数に設定します(5)。
  • NR<=n{next}-行番号がn以下の場合、処理をスキップします。
  • 1-printその他すべての省略形。
5
John B

awkコマンドは、NRレコード番号が3以上の行のみを印刷することでこれを実行できます。

awk 'NR>=3' input_file_name

必要に応じて変数を使用してawkに値を渡すこともできます。

awk -v n=3 'NR>=n' input_file_name

(そして、-v n=${num}も環境変数を使用します)。

同じ仕事をするために使用できる他の多くのツール、tailsed、およびPerlがあります。これはプログラミングQ&Aサイトであるため、独自のツールを展開してください。 :

#include <stdio.h>

int main (void) {
    // Need character and # of newlines to skip.

    int ch, newlines = 2;

    // Loop until EOF or first lines skipped, exit on EOF.

    while ((ch = getchar()) != EOF)
        if ((ch == '\n') && (--newlines == 0))
            break;

    if (ch == EOF)
        return 0;

    // Now just echo all other characters, then return.

    while ((ch = getchar()) != EOF)
        putchar (ch);

    return 0;
}

これに対して通常、独自のフィルタープログラムを作成することはありませんが、最短のコマンドを要求したので、そのソースコードを使用してxという実行可能ファイルを作成できます。

x <input_file_name

あなたはそれより短いコマンドを見つけるのに苦労するでしょう。もちろん、UNIXy環境(具体的にはbash)にいると仮定すると、次のこともできます。

alias x awk 'NR>=3'

:-)

2
paxdiablo