Gawk Print удивительное поведение - PullRequest
1 голос
/ 06 марта 2020

CSV-файл состоит из двух столбцов. Приведенный ниже код выводит весь файл (все строки и два столбца, разделенные запятой)

BEGIN {FS=","}
{print $0}

Однако приведенный ниже код выводит только одно значение, а именно. Столбец 1 первой строки:

BEGIN {FS=","}
{print $1}

Над кодом указан файл .awk, который запускается в Windows с помощью команды gawk -f test.awk xyz.csv> output.csv

Что я делаю не так?

Отредактировано: вывод после изменения {Print $ 1} на "{print "<" NR "><" $1 "><" $0 ">"}" ``

<1><naskar><naskar,sahoo ,1
sahoo ,18290,
ree ,6379,
mukherjee ,4609,

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Попробуйте вызвать gawk как gawk -v RS='\n' ..., так как наиболее вероятная проблема состоит в том, что у вас есть UNIX окончания строк (\n) во входном файле, но ваш вызов gawk ожидает окончания строки DOS (\r\n) и т. Д. думает, что файл является одной строкой. Если это не так, тогда измените {print $1} на {print "<" NR "><" $1 "><" $0 ">"} и создайте файл с 5 строками, запустите скрипт на нем, затем отредактируйте свой вопрос, чтобы показать входной файл и полученный результат.

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

В windows вы можете создать пакетный файл следующим образом:

@echo off
powershell -Command "write \"$(\"CRLF:\") - $((Get-Content '%1' -Raw) -match '\r\n$')\""
powershell -Command "write \"$(\"CR:\") - $((Get-Content '%1' -Raw) -match '\r$')\""
powershell -Command "write \"$(\"LF:\") - $((Get-Content '%1' -Raw) -match '\n$')\""

Он выведет что-то подобное для файла с LF в качестве разделителя строк:

D:\TEMP>file.bat textfile.txt
CRLF: - False
CR: - False
LF: - True
D:\TEMP>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...