我可以让 awk 根据 '\n' 剪切它的输入吗?

我可以让 awk 根据 '\n' 剪切它的输入吗?

我们都知道我们可以使用 awk 获取一行的列,但是这些列被空格分隔:

cat FileName | awk ' { print $1,$2,$3 .... }'

但是如果我们想根据 '\n' 分割文件怎么办:
例如,如果我们有这个文件:

Hi 
Hello
Aloha

我们想使用“awk”获得第二个单词“Hello”,我们该怎么办?

答案1

在 awk 中,有两种主要的分隔符:字段分隔符和记录分隔符。记录分隔符分隔不同的字段组。正如您可能从这个描述中猜到的那样,默认记录是换行符。您可以访问变量中的当前记录索引NR

awk 'NR==2 { print; exit }'

您也可以只写awk NR==2,但 awk 会(因为您在找到它后没有告诉它退出)在到达第 2 行后忠实地继续处理文件的其余部分,这在大文件中可能需要很长时间。告诉exitawk 在打印记录 2 后立即退出。

答案2

根据您在这里尝试执行的操作,您也许可以使用 awk 的“多行记录”模式。来自Gawk's手册:

如果 RS 设置为空字符串,则记录由空行分隔。当 RS 设置为空字符串时,除了 FS 可能具有的任何值之外,换行符始终充当字段分隔符。

因此,对于你的情况,你可以得到这样的第二行:

awk '{ print $2 }' RS= FileName

输出:

Hello

答案3

您也可以sed只打印第二行,

sed -n '2p' file

或者:

sed '2!d;q' file

sed读取并打印第二行后退出,这样它就不会读取文件的其余部分。

或者:

head -n 2 file | tail -n 1

相关内容