CSH - команда в обратной кавычке теряет все пробелы и переводы строк - PullRequest
0 голосов
/ 07 сентября 2018

Когда я использую tcsh для обработки текстового файла, я сталкиваюсь с проблемой. Я уже обработал данные и сохранил результаты в переменной temp.

Для следующей команды она используется для сортировки обработанных данных и сохранения отсортированных данных во временном файле. Может дать правильный результат:

echo "$temp" | sort -t , -k1n -k2 >> tempsorted

Однако по какой-то причине я не могу использовать временный файл. Мне нужно перенаправить результаты в переменную. Я попробовал следующую команду:

set a=`echo "$temp" | sort -t , -k1n -k2`

Эта команда удаляет все space и newlines в результатах. Как это: 2739, Northville city, Wayne , Northville city | Wayne | 2739 2929, Village of Grosse Pointe Shores city, Wayne , Village of Grosse Pointe Shores city | Wayne | 2929 ...

Кто-нибудь имеет представление об этом? Мне нужно сохранить отсортированный результат в переменной, чтобы выполнить дополнительную обработку без использования временного файла. Конверт должен быть #!/bin/tcsh -f Спасибо.

Часть содержимого в temp переменная:

84094, Westland city, Wayne , Westland city                        | Wayne          |      84094
28497, Northville township, Wayne , Northville township                  | Wayne          |      28497
17593, Wayne city, Wayne , Wayne city                           | Wayne          |      17593
27692, Garden City city, Wayne , Garden City city                     | Wayne          |      27692
3991, Belleville city, Wayne , Belleville city                      | Wayne          |       3991
3289, Rockwood city, Wayne , Rockwood city                        | Wayne          |       3289

Часть ожидаемого результата:

2739, Northville city, Wayne , Northville city                      | Wayne          |       2739
2929, Village of Grosse Pointe Shores city, Wayne , Village of Grosse Pointe Shores city | Wayne          |       2929
3289, Rockwood city, Wayne , Rockwood city                        | Wayne          |       3289
3991, Belleville city, Wayne , Belleville city                      | Wayne          |       3991
4656, Gibraltar city, Wayne , Gibraltar city                       | Wayne          |       4656
5421, Grosse Pointe city, Wayne , Grosse Pointe city                   | Wayne          |       5421

Решения, которые я попробовал с ошибкой:

1

set a=$("$temp" | sort -t , -k1n -k2)

имеет сообщение об ошибке

Illegal variable name.

2

set a="`"$temp" | sort -t , -k1n -k2`"

имеет сообщение об ошибке

Unmatched `.

1 Ответ

0 голосов
/ 11 сентября 2018

`` называется подстановкой команд в tcsh. По умолчанию команда подстановки преобразует весь вывод в «слова», разделенные пробелами, символами табуляции и переводами строки. Я не думаю, что поведение можно изменить. Смотрите ниже простой пример

> cat /tmp/file
lots           of spaces
line 2
> echo `cat /tmp/file`
lots of spaces line 2
>
...