Linux “ cat ”コマンドを使用して、特定の行のみを番号
On 2月 15, 2021 by admin cat -n text.txt
を使用して行に自動的に番号を付ける場合、コマンドを使用して特定の番号の行のみを表示するにはどうすればよいですか。
コメント
回答
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
回答
これを行う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
回答
あなたawkをまっすぐに使用できます。
awk "NR==1" file.txt
「1」を目的の行番号に置き換えます。
コメント
- これは100万マイルもここでの最良の答えであり、それよりもはるかに多くの愛に値します。
回答
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
は必要ありませんが - そうですね。 。しかし….しかし……..より良い方法があります。しかし、猫の使用について質問があったので、私はそれを使用しました。
-
cat
'はOPの機能を実行できません欲しい
回答
他の人が示しているように、。他のプログラムがあなたのためにそれをします。ただし、本当に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
コメント
-
$1
の代わりにNR
を使用できませんでしたか? - @SolomonUcko確かに、しかし
cat -n
を使用してこれを行う方法を具体的に示していたので、cat -n
が提供する出力を使用すると思いました。
回答
sedを使用すると、1つの数字とlのみを表示できます。 forループでこれをおっと:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
もこれを実行でき、awk