'\n'に基づいて入力をawkに切り捨てることはできますか?

'\n'に基づいて入力をawkに切り捨てることはできますか?

私たちは皆、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

sed2行目のみ印刷できます。

sed -n '2p' file

または:

sed '2!d;q' file

sedファイルの残りの部分を読み取らないように、2行目を読んで印刷してから終了します。

または:

head -n 2 file | tail -n 1

関連情報