awk用一些输入文件覆盖$ NF ....

时间:2014-03-27 22:57:43

标签: csv awk opendata

我有一个带有一些地址和管理员代码的.csv文件。我想在最后一栏(英国邮政编码)上对其进行排序。我试图通过将最后一列移到开头然后使用sort来重新排序文件,但我遇到了一个奇怪的问题。 这是一些数据:

$ head T201311ADDR\ BNFT.CSV 
201311,A81001,THE DENSHAM SURGERY                     ,THE HEALTH CENTRE        ,LAWSON STREET            ,STOCKTON                 ,CLEVELAND                ,TS18 1HU
201311,A81002,QUEENS PARK MEDICAL CENTRE              ,QUEENS PARK MEDICAL CTR  ,FARRER STREET            ,STOCKTON ON TEES         ,CLEVELAND                ,TS18 2AW
201311,A81003,THE GALLAGHER PRACTICE                  ,THE HEALTH CENTRE        ,VICTORIA ROAD            ,HARTLEPOOL               ,CLEVELAND                ,TS26 8DB
201311,A81004,WOODLANDS ROAD SURGERY                  ,6 WOODLANDS ROAD         ,                         ,MIDDLESBROUGH            ,CLEVELAND                ,TS1 3BE 
201311,A81005,SPRINGWOOD SURGERY                      ,SPRINGWOOD SURGERY       ,RECTORY LANE             ,GUISBOROUGH              ,                         ,TS14 7DJ

我可以得到最后一栏:

$ head T201311ADDR\ BNFT.CSV | awk -F ',' 'BEGIN {OFS = ","} {print $NF}' 
TS18 1HU
TS18 2AW
TS26 8DB
TS1 3BE 
TS14 7DJ

但如果我在线上打印任何其他东西,它会覆盖它。

$ head T201311ADDR\ BNFT.CSV | awk -F ',' 'BEGIN {OFS = ","} {print $NF, $2}' 
,A81001U
,A81002W
,A81003B
,A81004 
,A81005J
,A81006T
,A81007W
,A81008 
,A81009 
,A81011W

显然没用。我尝试过使用刚刚编辑过的测试文件并且没有看到此行为,因此它与此特定文件有关。有什么建议?某些换行符是否存在已知问题?我在Mac上工作,我怀疑该文件来自PC。它来自英国的NHS数据。

1 个答案:

答案 0 :(得分:2)

你的文件中可能包含一些奇怪的(Windowsy)字符,试试这个:

cat -vet yourfile

并寻找^ M,这是回车如何出现。这是一个例子:

cat -vet file
I came from Windows-world ^M$
so did I ^M$

或者,如果您只拥有或更喜欢sed

sed -ne "l"  file
I came from Windows-world \r$
so did I \r$

您可以使用tr删除任何奇怪的字符。要删除回车符(\ r),请执行以下操作:

tr -d '\r' < inputfile > outputfile