如何使用sed和wc命令来处理空格

时间:2013-11-11 09:31:40

标签: linux shell ubuntu sed wc

如果我有一个CSV文件并且我想知道列数,我将使用以下命令:

  head -1 CSVFile.csv | sed 's/,/\t/g' | wc -w

但是,每当每列都有一个包含空格的列名时,该命令就不起作用并给我一个无意义的数字。

编辑此命令的方法是什么,以便为我提供正确的列数?

e.g。在我的文件中,我可以使用列名(t - ZK)(e - 22)

例如我的文件可能是(前2行);

 ZZ(v - 1),Tat(t - 1000)
 1.1240128401924,2929292929

5 个答案:

答案 0 :(得分:0)

也许使用最后一行而不是第一行。将“头部”改为“尾部”。这将是一个快速,简单的解决方案。

答案 1 :(得分:0)

您正在将sed输出汇总到wc -w,这会在输出中返回的数量。因此,如果字段标题包含空格,那么这些空格将被视为不同的单词。

您可以使用awk

head -1 CSVFile.csv | awk -F, '{print NF}'

这将返回文件中的列数(假设文件以逗号分隔)。

答案 2 :(得分:0)

尝试使用awk

awk -F, 'NR==1 {print NF; exit}' CSVFile.csv

如果您希望使用headsedwc

尝试使用sed替换分隔符作为换行符\n而不是标签\t,然后使用wc -l计算行数而不是使用{{1}计算单词数}

wc -w

答案 3 :(得分:0)

perl -ane 'print scalar(@F)-1 if($.==1)' your_file

答案 4 :(得分:0)

假设标题名称中没有“,”(如field1,“Surname,name”,field3,...)

sed "1 s/[^,]//g;q" CSVFile.csv | wc -c

也可以只在sed中制作,但计数有点重。