Linuxの「cat」コマンドを使用して、特定の行のみを番号で表示するにはどうすればよいですか


59

cat -n text.txt行の自動番号付けに使用する場合、コマンドを使用して特定の番号付き行のみを表示するにはどうすればよいですか。


1
「特定の番号の行のみを表示する」とはどういう意味ですか、期待される出力を出力できますか?
タコミ

1
これを行うには、おそらく100万通りの方法があるでしょう。tail+ headできるように、これもできるawk
Bratchley

回答:


120

つかいます sed

使用法

$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10

1行を印刷するには(5)

$ sed -n 5p file
Line 5

複数の行を印刷するには(5および8)

$ sed -n -e 5p -e 8p file
Line 5
Line 8

特定の範囲(5〜8)を印刷するには

$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8

他の特定の行で範囲を印刷するには(5-8および10)

$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10

27

それを行う1つの方法は、次を使用することですsed

cat -n text.txt | sed '11d'

ここで、11は削除する行の番号です。

または、11以外のすべてを削除するには:

cat -n text.txt | sed '11!d'

範囲も可能です:

cat -n text.txt | sed '9,12!d'

そして、cat -nさえ必要ありません。

sed '9,12!d' text.txt

9

awkをまっすぐに使用できます。

awk 'NR==1' file.txt

「1」を目的の行番号に置き換えます。


1
これは、100万マイル単位の最良の答えであり、それが持つよりも多くの愛に値します。
レン

8

目標に応じて、headまたはgrepが好きです

cat /var/log/syslog -n | head -n 50 | tail -n 10

41行目から50行目を返します。

または

cat /var/log/syslog -n | grep " 50" -b10 -a10

行40〜60が表示されます。grepメソッドの問題は、行番号のパディングにアカウントを使用する必要があることです(スペースに注意してください)。

どちらもログファイルの解析に非常に便利です。


catただし、どちらの例も必要ありません
-roaima

1
ええ...しかし.......しかし... .....より良い方法があります。質問は猫の使用について尋ねたので、私はそれを使用しました。
coteyr

catOPが望むことを実行できない
ロアイマ

2

他の人が示したように、を使用する必要はありませんcat -n。他のプログラムがあなたのためにそれをします。ただし、cat -n特定の行(4〜8、12、42など)の出力を解析して表示するだけの場合は、次のようにします。

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
 4  Line 4
 5  Line 5
 6  Line 6
 7  Line 7
 8  Line 8
12  Line 12
42  Line 42

ではawk$1最初のフィールドです。したがって、このコマンドは、最初のフィールドがi)4〜8(両端を含む)またはii)12またはiii)42であるすべての行を出力します。

cat -nファイルから元の行を取得するために追加されたフィールドも削除する場合は、次の操作を実行できます。

$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.