我们都知道我们可以使用 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 行后忠实地继续处理文件的其余部分,这在大文件中可能需要很长时间。告诉exit
awk 在打印记录 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