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