使用Awk命令行以逗号分隔打印列

时间:2014-11-10 11:14:33

标签: csv awk

我这里有问题。我必须使用awk在文本文件中打印一列。但是,列根本不用空格分隔,只使用一个逗号。看起来像这样:

column1,column2,column3,column4,column5,column6

如何使用awk打印出第3列?

4 个答案:

答案 0 :(得分:83)

尝试:

awk -F',' '{print $3}' myfile.txt

这里的-F你要说使用“,”作为字段分隔符。

答案 1 :(得分:30)

如果你唯一的要求是打印每一行的第三个字段,每个字段用逗号分隔,你可以使用cut:

cut -d, -f3 file
  • -d,将分隔符设置为逗号
  • -f3指定只打印第三个字段

答案 2 :(得分:17)

试试这个awk

awk -F, '{$0=$3}1' file
column3
  • ,,
  • 划分字段
  • $0=$3将行设置为仅限字段3
  • 1全部打印出来。 (explained here

答案 3 :(得分:2)

中的简单{,3}}解决方案:

while IFS=, read -r a a a b; do echo "$a"; done <inputfile

对于小文件(&lt; 100行)然后,它的工作速度更快,因为它使用的资源更少(避免调用昂贵的forkexecve系统调用。)

来自Ed Morton的编辑(抱歉嗨回答,我不知道是否有更好的解决方法):

为了解决shell对于小文件运行速度比awk快的问题:

$ wc -l file
99 file

$ time while IFS=, read -r a a a b; do echo "$a"; done <file >/dev/null

real    0m0.016s
user    0m0.000s
sys     0m0.015s

$ time awk -F, '{print $3}' file >/dev/null

real    0m0.016s
user    0m0.000s
sys     0m0.015s

我希望如果你得到一个足够小的REALY文件,那么你会看到shell脚本在一段时间内比awk脚本运行得快但是谁在乎呢?

如果您认为编写健壮的shell脚本比使用awk脚本更难,那么请查看您发布的shell脚本中的这个错误:

$ cat file
a,b,-e,d
$ cut -d, -f3 file
-e
$ awk -F, '{print $3}' file
-e
$ while IFS=, read -r a a a b; do echo "$a"; done <file

$