Linux "cat"コマンドを使用して特定の行のみを数値で表示する方法

Linux "cat"コマンドを使用して特定の行のみを数値で表示する方法

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

答え1

使用sed

使用法

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

一行印刷(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

答え2

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

答え3

awkを直接使用できます。

awk 'NR==1' file.txt

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

答え4

他の人が示したように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

inawk$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

関連情報