使用awk在两行数之间剪切文件

时间:2014-10-22 16:09:06

标签: text awk text-processing

假设我有一个包含100行的文件(不包括标题)。我想要删除该文件,只保留第51行和第70行(包括)之间的内容,以及标题,以便生成的文件为20 + 1行。

到目前为止,我有这段代码:

awk 'NR==1 {h=$0; next} (NR-1)>50 && (NR-1)<71 {filename = "file20.csv"; print h >> filename} {print >> filename}' file100.csv

但它给了我一个错误:

  

致命:表达“&gt;&gt;”重定向具有空字符串值

有人可以帮我理解我的语法错误吗?

1 个答案:

答案 0 :(得分:2)

您可以直接使用:

awk 'NR==1 || (NR>=51 && NR<=70)'

请注意,这会评估NR的条件。如果是真的,它会执行awk的默认操作:{print $0}。因此,您不必明确它。

然后您可以重定向到另一个文件:

awk 'NR==1 || (NR>=51 && NR<=70)' file > new_file

测试

$ seq 100 | awk 'NR==1 || (NR>=51 && NR<=70)'
1
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70

它返回21行:

$ seq 100 | awk 'NR==1 || (NR>=51 && NR<=70)' | wc -l
21