【发布时间】:2024-04-29 19:15:02
【问题描述】:
可能是一个简单的问题,但我还没有找到答案。我有一个文件,其中有多个记录,由空行分隔。文件中的每个字段都由换行符分隔。我只是想打印出整个第一条记录或整个第三条记录。
awk 'BEGIN{FS="";} {print $1}' output.txt
上面打印出第一条记录每一行的第一个字母
awk 'BEGIN{FS="\n"; RS=""} {print $1}' output.txt
上面打印出第一条记录的第一个字段。
这似乎是一个很简单的问题,但我似乎无法解决它。记录具有不确定数量的字段(行)。它们只是用一个空行分隔
一个
好的,这是一个示例:
line1 record1
line2 record1
line3 record1
line4 record1
line1 record2
line2 record2
line3 record2
line4 record2
line5 record2
line1 record3
line1 record4
line2 record4
现在我想要整个第一条记录和整个第三条记录。
awk 'NR==1 || NR==3 {print $0}' output.txt
line1 record1
line3 record1
第一条记录的第一行和第三行。不好
awk 'NR==1 || NR==3' output.txt
line1 record1
line3 record1
第一条记录的第一行和第三行。不好
awk 'NR==1 || NR==3 {print $0}' output.txt
line1 record1
line3 record1
第一条记录的第一行和第三行。不好。
awk 'BEGIN{FS="\n"; RS=""} NR==1' output.txt
line1 record1
line2 record1
line3 record1
line4 record1
line1 record2
line2 record2
line3 record2
line4 record2
line5 record2
line1 record3
line1 record4
line2 record4
全部打印出来。不好
我只想要第一条和第三条记录。 第一个是:
line1 record1
line2 record1
line3 record1
line4 record1
第三个是:
line1 record3
好的,所以没有任何说明似乎对我有用,我很困惑。这是shell输出:
$ awk -v RS= -v ORS='\n\n' 'NR ~ /^(1|3)$/' output.txt
line1 record1
line2 record1
line3 record1
line4 record1
line1 record2
line2 record2
line3 record2
line4 record2
line5 record2
line1 record3
line1 record4
line2 record4
$ cat output.txt
line1 record1
line2 record1
line3 record1
line4 record1
line1 record2
line2 record2
line3 record2
line4 record2
line5 record2
line1 record3
line1 record4
line2 record4
$
我很困惑为什么这不起作用。
这是我的系统和我正在使用的 awk:
$ awk -V | head -1
GNU Awk 4.0.1
$ uname -a
Linux IEDUB2TJ5262 3.13.0-68-generic #111-Ubuntu SMP Fri Nov 6 18:17:06 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$
这里有什么我可能会遗漏的吗?
一个
【问题讨论】:
-
所以要打印第一行和第三行?显示一些示例输入和所需输出以使其更清晰会很有用。
-
我想打印一条记录,而不是行(字段)
-
你的空行真的是空的吗?它们是否包含任何空格(空格、制表符、回车)?
-
使用上面的例子。空白行只是空白行。进入vi
-
为了好玩,你能检查一下
cat -vet output.txt显示的内容吗?这将有助于我们了解您的输入文件是否有一些奇怪的地方会导致 awk 误解。