7

最後の n 行または最初の n 行を除くすべての行を短いワンライナーで削除したい

例えば。:

---

aaaa

bbbb

cccc

dddd

cat/echo/find ...  | sed < all except last 2 lines > 

結果になるはずです

aaaa

bbbb

---

aaaa

bbbb

cccc

dddd

eeee

ffff

cat/echo/find ...  | sed < all except last 2 lines > 

結果になるはずです

aaaa

bbbb

cccc

dddd

---

これは、非常に高い n's にも必要です。したがって、n=100 程度に設定することも可能です ;)

助けてくれてありがとう!

4

8 に答える 8

6

最後の 2 行を削除するには、次のようなものを使用できます。

head -n $(($(wc -l < "$filename") - 2)) "$filename"

あまりエレガントではありませんが、うまくいくはずです。wc -l を使用して行数を数え、次に head を使用して最初の行数から 2 行を引いた数だけを表示します。

編集:できる最後の行だけを保持するN

tail -n $N $filename

あなたができる最初の行だけを保持Nするには。

head -n $N $filename

あなたの質問を誤解したようです。そのため、これら 2 つのコマンドを追加します。

于 2013-11-14T12:15:55.557 に答える
3

n last 以外のすべての行を削除したい

最も簡単な方法は次のとおりです (n=5 とします):

tail -n5 $filename > $filename.tmp && mv $filename.tmp $filename

これにより、最後の 5 行が新しいファイルに出力され、名前が変更されます。

タスクが逆の場合 - すべての行が必要ですが、最後に 5 行が必要な場合は、次のことができます。

head -n$((`cat $filename | wc -l` - 5)) $filename > $filename.tmp && mv $filename.tmp $filename
于 2013-11-14T13:36:48.880 に答える
0

ファイルの最初の 3 行を除くすべてを印刷し、次に最後の 3 行を除くすべてを印刷するには:

$ cat -n file
     1  a
     2  b
     3  c
     4  d
     5  e
     6  f
     7  g
$ awk -v sz="$(wc -l < file)" 'NR>3' file      
d
e
f
g
$ awk -v sz="$(wc -l < file)" 'NR<=(sz-3)' file
a
b
c
d
于 2013-11-14T17:36:32.237 に答える
-1

頭と尻尾を使用できます:</p>

最初の n 行を除くすべての行を削除するには:</p>

head -n ファイル名 > new_filename

最後の n 行を除くすべての行を削除するには:</p>

tail -n ファイル名 > new_filename

次に例を示します。

$ 猫のテスト

1

2

3

4

5

6

7

8

$ head -2 テスト

1

2

于 2013-11-14T12:17:34.847 に答える
-1

あなたも試すことができます

awk -vn=2 -f rem.awk input.txt

どこrem.awkですか

BEGIN { ("wc -l " ARGV[1]) | getline 
    a=$1-n+1 }     
NR<a { print }
于 2013-11-14T14:39:34.623 に答える