Linux 使用shell脚本根据随机ID号将数据分离为文件

Linux 使用shell脚本根据随机ID号将数据分离为文件,linux,shell,Linux,Shell,我有一个制表符分隔的文件(1993_NYA.tab),其中无线电探空仪数据包含其ID。我想将每个ID的数据提取到单独的制表符文件中。文件看起来像这样 1993-01-01T10:45:03 083022143 250 78.93018 11.95426 960.0 -16.8 76 1.7 276 1993-01-01T10:45:16 083022143 300 78.93011 11.95529 953.7 -17.2 77 1.8 288

我有一个制表符分隔的文件(1993_NYA.tab),其中无线电探空仪数据包含其ID。我想将每个ID的数据提取到单独的制表符文件中。文件看起来像这样

1993-01-01T10:45:03 083022143   250 78.93018    11.95426    960.0   -16.8   76  1.7 276
1993-01-01T10:45:16 083022143   300 78.93011    11.95529    953.7   -17.2   77  1.8 288
1993-01-01T10:45:30 083022143   350 78.93000    11.95638    947.3   -17.6   79  2.0 297
这里083022143是ID,但它会随机更改(不是按升序)。我尝试的代码如下

ID=$(cat 1993_NYA.tab | cut -f 2 | sort | uniq)
for i in {$ID}
do
awk -F '\t' '$2 = "$i"' 1993_NYA.tab > 1993_$i.tab
done

这不是将特定ID的数据存储到包含相同ID的文件名中。请任何人提供帮助。

有三个小错误

  • {$ID}
    应该只是
    $ID
  • '$2=“$i”
    具有赋值运算符
    =
    ,而不是比较运算符
    =
  • “$2=“$i””
    由于使用单引号,因此不会在参数中插入i的值;我们可以写e。g<代码>“\$2==$i”
通过上述更改,您的代码可以正常工作。但是
awk
具有内置的魔力,使任务更容易完成。单一命令

awk -F '\t' '{print >"1993_"$2".tab"}' 1993_NYA.tab

做你想做的。

有三个小错误

  • {$ID}
    应该只是
    $ID
  • '$2=“$i”
    具有赋值运算符
    =
    ,而不是比较运算符
    =
  • “$2=“$i””
    由于使用单引号,因此不会在参数中插入i的值;我们可以写e。g<代码>“\$2==$i”
通过上述更改,您的代码可以正常工作。但是
awk
具有内置的魔力,使任务更容易完成。单一命令

awk -F '\t' '{print >"1993_"$2".tab"}' 1993_NYA.tab

是否满足您的要求。

有多少不同的唯一ID?请您同时说明输出文件名的外观。我已经回答了这个问题,但似乎需要更多关于这个问题的信息,所以请删除它,直到您提供关于问题的更多信息。一旦信息被添加,它将被编辑和删除。几乎有300个唯一的ID。这个问题现在已经解决了。谢谢你的帮助。有多少个不同的唯一ID?你能不能也提到输出文件名的样子?我已经回答了这个问题,但看起来需要更多关于这个问题的信息,所以删除它,直到你提供更多关于问题的信息。一旦信息被添加,它将被编辑和删除。几乎有300个唯一的ID。这个问题现在已经解决了。谢谢你的帮助。