根据文件列中的值拆分大文件

时间:2019-04-16 06:16:36

标签: awk

我有一个大文件,大小为38000 x5001。第一列是位置信息,其余是信号。我还有另一个文件,其中包含大文件中也存在的位置对。我需要将大文件拆分为多个小文件,其中每个文件仅包含特定范围内的行。

我知道这几乎是一个重复的问题,我已经尝试了之前提供的所有内容。这不起作用,这就是为什么我在这里发布代码的原因。我已经尝试过awk。这是我尝试过的。

包含范围对的文件以最低和最高值命名。例如,我拥有的范围文件的名称可以为blah_blah_30000_4000.txt。该文件每隔500个包含对值。如

30000    30000
30000    30500
30000    31000
.
.
.
40000    30000
40000    30500
.
.
.
40000    40000

首先,我从文件名中提取了最低和最高值。

IFS='_' read -a splittedName <<< "${fileName}"
startRange=${splittedName[2]}
endRange=${splittedName[3]}

现在将这两个字符串转换为数字

starting=$((startRange + 0))
ending=$((endRange + 0))

然后我像这样使用awk

awk -F, '{ if($1 >= "$startRange" && $1 <= "$endRange") { print >"test.txt"} }' $InputFile

谁能告诉我我做错了什么地方?

1 个答案:

答案 0 :(得分:1)

您应该以这种方式重写命令:

awk -F, -v start=$startRange -v end=$endRange -v fname=$fileName\
'{ if($1 >= start && $1 <= end) { print >$fname.txt} }' $InputFile

如注释中所述,您不能在awk脚本内使用shell变量