假设我有一个包含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;”重定向具有空字符串值
有人可以帮我理解我的语法错误吗?
答案 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