私たちは皆、awkを使用して行の列を取得できることを知っていますが、列はスペースで区切られています。
cat FileName | awk ' { print $1,$2,$3 .... }'
しかし、「\ n」に基づいてファイルを分割するにはどうすればよいですか?
たとえば、次のファイルがあるとします。
Hi
Hello
Aloha
「awk」を使用して2番目の単語「Hello」を取得するにはどうすればよいですか?
答え1
awk には、フィールド区切り文字とレコード区切り記号の 2 つの主な種類の区切り文字があります。レコード区切り文字は、さまざまなフィールドグループを区別します。この説明から推測できるように、基本レコードは改行です。変数から現在のレコードインデックスにアクセスできますNR
。
awk 'NR==2 { print; exit }'
ちょうど書くことができますawk NR==2
が、awkは(検索して終了するように指示しなかったため)、行2に達した後にファイルの残りの部分を忠実に処理し続けます。これは大容量ファイルに長い時間がかかることがあります。exit
レコード2を印刷したらすぐに終了するようにawkに指示します。
答え2
ここで実行したい操作に応じて、awkの「複数行ロギング」モードを使用できます。Gawk's
マニュアルから:
RS が空文字列に設定されている場合、レコードは空行で区切られます。 RSが空の文字列に設定されている場合、改行文字はFSが持つことができる値に加えて常にフィールド区切り文字として機能します。
したがって、あなたの場合は、次の2行目を取得できます。
awk '{ print $2 }' RS= FileName
出力:
Hello
答え3
sed
2行目のみ印刷できます。
sed -n '2p' file
または:
sed '2!d;q' file
sed
ファイルの残りの部分を読み取らないように、2行目を読んで印刷してから終了します。
または:
head -n 2 file | tail -n 1