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

Text 使用awk在两行数字之间剪切文件,text,awk,text-processing,Text,Awk,Text Processing,假设我有一个100行的文件(不包括标题)。我希望将该文件缩减,只保留第51行和第70行(包括第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 a

假设我有一个100行的文件(不包括标题)。我希望将该文件缩减,只保留第51行和第70行(包括第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
awk'NR==1{h=$0;next}(NR-1)>50&&(NR-1)>filename}{print>>filename}file100.csv
但这给了我一个错误:

致命:“>>”重定向的表达式具有空字符串值

有人能帮我理解我的语法哪里错了吗?

您可以直接使用:

awk 'NR==1 || (NR>=51 && NR<=70)'
试验
$seq 100|awk'NR==1|(NR>=51&&NR=51&&NROk,就是这么做的。顺便说一句,你知道我原来帖子中的代码为什么不起作用吗?@Y.C.Wu我正在检查。我不清楚为什么你在
NR
在所需范围内的每种情况下都设置
filename
。可能你是想在
filename
还没有设置的时候写入它。编辑:现在我知道了请参见glenn jackman的评论!错误原因:在第2行,您在“filename”变量未定义的地方执行此
{print>>filename}
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
$ seq 100 | awk 'NR==1 || (NR>=51 && NR<=70)' | wc -l
21