CSH-反引号中的命令会丢失所有空格和换行符

时间:2018-09-07 16:29:27

标签: shell csh tcsh

当我使用tcsh处理txt文件时,遇到了问题。 我已经处理了数据,并将结果存储在变量temp中。

对于以下命令,它用于对处理后的数据进行排序并将排序后的数据存储在临时文件中。可以产生正确的结果:

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

但是,由于某些原因,我无法使用临时文件。我需要将结果重定向到变量。我尝试了以下命令:

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

此命令将删除结果中的所有spacenewlines。像这样:2739, Northville city, Wayne , Northville city | Wayne | 2739 2929, Village of Grosse Pointe Shores city, Wayne , Village of Grosse Pointe Shores city | Wayne | 2929 ...

有人对此有想法吗?我需要将排序后的结果存储在变量中,以在不使用临时文件的情况下进行额外的处理。 Env应该#!/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 :(得分:0)

``在tcsh中称为命令替换。默认情况下,命令替换将整个输出转换为以空格,制表符和换行符分隔的“单词”。我认为行为无法改变。参见下面的简单示例

l =['A', 'B', 'A', 'B', 'A', 'C', 'D', 'E', 'D', 'E', 'D', 'F', 'G', 'A', 'B', 'G']
for sec in get_sec_it(l, 2):
    print(sec)