【问题标题】:How to use sed and wc command to handle whitespace如何使用 sed 和 wc 命令处理空格
【发布时间】:2013-11-23 01:15:46
【问题描述】:

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

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

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

如何编辑此命令以提供正确的列数?

例如在我的文件中,我可以有列名 (t - ZK) 或 (e - 22)

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

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

【问题讨论】:

    标签: linux shell ubuntu sed wc


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您正在将sed 输出传送到wc -w,这将返回输出中的字数。因此,如果字段标题包含空格,则它们将被视为不同的单词。

      你可以使用awk:

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

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

      【讨论】:

        【解决方案3】:

        尝试使用awk

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

        如果您想使用head、sed 和wc 的链

        尝试使用sed将分隔符替换为换行符\n而不是制表符\t,然后使用wc -l计算行数,而不是使用wc -w计算单词数

        head -1 CSVFile.csv | sed 's/,/\n/g' | wc -l
        

        【讨论】:

          【解决方案4】:
          perl -ane 'print scalar(@F)-1 if($.==1)' your_file
          

          【讨论】:

            【解决方案5】:

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

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2013-03-03
              • 2013-07-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-10-21
              相关资源
              最近更新 更多