Как сгенерировать файл по фиксированной позиции с помощью awk windows

У меня есть командная строка awk, разработанная в Unix, и я должен передать ее в Windows. Я установил инструмент gawk для Windows, настроил переменную среды и, наконец, преобразовал оболочку в пакетную, но когда я запускаю .bat, он создает пустой файл.

это мой код: file.bat

echo off
set "fecha=%1"
set "inputpath=%2"
set "unique=.uq"
set file=FICUO%fecha%.txt
echo %fecha%
echo %file%
awk "{!x[$1,$2,$6,$8,$9,$12,$16,$17,$33]++}" FIELDWIDTHS = "3 19 19 3 3 5 12 6 9 40 4 8 13 3 3 3 3 1 3 13 13 13 13 13 13 3 13 2 8 8 8 2 8 6 11 11 11 8 4" %inputpath%%file% > %inputpath%%file%%unique%

Я предполагаю, что проблема заключается в опции FIELDWITHS, я изучал ее и нашел, как указать фиксированное положение полей.

это пример входного плоского файла

2110004757960000000036000475796000332797200902200300000008067260007588013568776xxxxxxxxxxxxxxx                         54112015123000000002621706040000080030000000000026217000000000327710000000032771000000000000000000000000000000000032771031000000000000025201603252016042000000000  20151230000000000000010000000000000000000001000000000000000
2310004757960000000036000475796000332797200902200300000008067260007588013568776xxxxxxxxxxxxxxx                         54112015123000000002621706040000080040000000000026217000000000327710000000032771000000000000000000000000000000000032771030000000000000025201604252016052000000000  20151230000000000000010000000000000000000001000000000000000

любая идея, что может быть моей ошибкой, чтобы она ничего не печатала в выходном файле, спасибо

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
44
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема не в FIELDWIDTHS, а в том, что у вас есть условие, которое может вызвать print, скрытое в действии. Сдача:

{!x[$1,$2,$6,$8,$9,$12,$16,$17,$33]++}

к:

!x[$1,$2,$6,$8,$9,$12,$16,$17,$33]++

поэтому результат рассматривается как условие, которое может вызвать действие по умолчанию print. Я предполагаю, что цель состоит в том, чтобы напечатать уникальные строки из ввода. FWIW мы идиоматически называем массив, используемый в этом контексте, seen, а не x, и это упрощает понимание вашего кода, если вы объявляете свои переменные до их использования, то есть в начале скрипта, а не после их использования:

awk -v FIELDWIDTHS = "3 19 19 3 3 5 12 6 9 40 4 8 13 3 3 3 3 1 3 13 13 13 13 13 13 3 13 2 8 8 8 2 8 6 11 11 11 8 4" "!seen[$1,$2,$6,$8,$9,$12,$16,$17,$33]++" %inputpath%%file% > %inputpath%%file%%unique%

Если вы хотите, чтобы на выходе были поля, разделенные табуляцией, то:

awk -v FIELDWIDTHS = "3 19 19 3 3 5 12 6 9 40 4 8 13 3 3 3 3 1 3 13 13 13 13 13 13 3 13 2 8 8 8 2 8 6 11 11 11 8 4" -v OFS = "\t" "{key=$1 OFS $2 OFS $6 OFS $8 OFS $9 OFS $12 OFS $16 OFS $17 OFS $33} !seen[key]++{print key}" %inputpath%%file% > %inputpath%%file%%unique%

Извините, я не знаю синтаксиса Windows, поэтому, надеюсь, вы знаете, что с этим делать, если я неправильно понял кавычки или что-то в этом роде.

Другие вопросы по теме