Разделение данных на файлы по случайным номерам с помощью сценария оболочки - PullRequest
1 голос
/ 03 марта 2020

У меня есть файл с разделителями табуляции (1993_NYA.tab) с данными радиозонда, содержащими его идентификатор. Я хочу извлечь данные каждого идентификатора в отдельные файлы вкладок. Файл выглядит следующим образом.

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=$(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

Это не сохраняет данные определенного идентификатора в имя файла с таким же идентификатором. Может кто-нибудь, пожалуйста, помогите.

1 Ответ

0 голосов
/ 03 марта 2020

Есть три небольших ошибки.

  • {$ID} должно быть просто $ID.
  • '$2 = "$i"' имеет оператор присваивания = вместо сравнения ==.
  • '$2 = "$i"' не интерполирует значение i в аргумент из-за одинарных кавычек; вместо этого мы можем написать, например, "\$2 == $i".

С этими изменениями ваш код работает. Но у awk есть встроенные маги c, которые значительно облегчают задачу. Одиночная команда

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

делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...