unix - 文件中的列数

too*_*oop 68 unix linux bash shell scripting

给定一个包含这样数据的文件(即stores.dat文件)

sid|storeNo|latitude|longitude
2|1|-28.03720000|153.42921670
9|2|-33.85090000|151.03274200
Run Code Online (Sandbox Code Playgroud)

输出列名数的命令是什么?

即在上面的示例中它将是4.(管道字符数+第一行中的1)

我想的是:

awk '{ FS = "|" } ; { print NF}' stores.dat
Run Code Online (Sandbox Code Playgroud)

但它返回所有行而不是第一行,而第一行则返回1而不是4

Mat*_*Mat 103

awk -F'|' '{print NF; exit}' stores.dat 
Run Code Online (Sandbox Code Playgroud)

刚刚在第一行之后退出.

  • @JaypalSingh:这将读取整个文件 - 不需要,最好提前停止. (10认同)
  • 或者'awk -F'|' 'NR == 1 {print NF}'stores.dat` (3认同)
  • @toop:是的,请参阅我之前的评论。我的版本只会从文件中读取一个块,而Jaypal的则会读取整个文件。 (2认同)

mik*_*iku 36

这是一种解决方法(对我来说:我不经常使用awk):

显示包含数据的文件的第一行,用换行符替换所有管道,然后计算行数:

$ head -1 stores.dat | tr '|' '\n' | wc -l
Run Code Online (Sandbox Code Playgroud)

  • 对于具有maaany列的文件(想想SNP数据),这是要走的路.Mat的解决方案返回"awk:超出程序限制:最大字段数= 32767". (9认同)

Tom*_*rdt 11

除非你在那里使用空格,否则你应该可以| wc -w在第一行使用.

wc是"字数统计",它只计算输入文件中的单词.如果您只发送一行,它会告诉您列数.

  • 为了完整起见,请将您的评论添加到答案中. (2认同)

Cat*_*err 5

你可以试试

猫文件| awk '{打印 NF}'