我在这里有问题。我必须使用awk在文本文件中打印一列。但是,这些列根本没有用空格分隔,仅使用了一个逗号。看起来像这样:
column1,column2,column3,column4,column5,column6
我将如何使用awk打印第三列?
我在这里有问题。我必须使用awk在文本文件中打印一列。但是,这些列根本没有用空格分隔,仅使用了一个逗号。看起来像这样:
column1,column2,column3,column4,column5,column6
我将如何使用awk打印第三列?
Answers:
试试这个 awk
awk -F, '{$0=$3}1' file
column3
,
将字段除以 ,
$0=$3
将行设置为仅字段 3
1
打印全部。(在这里说明)也可以使用:
awk -F, '{print $3}' file
cut -d, -f3 file
如果有人不熟悉的话,我认为这和这一样神秘cut
。;)
cut --help
它将解释您需要知道的所有内容,而awk --help
不会。也许我应该去cut --delimiter=, --fields=3 file
,尽管我怀疑较长的开关是否可以携带:)
while IFS=, read -r a a a b; do echo "$a"; done <inputfile
对于较小的文件(<100行),它的工作速度更快,然后 awk因为它使用较少的资源(避免调用昂贵的调用fork
和execve
系统调用)。
埃德·莫顿(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
$
awk
?恕我直言,这是一个非常简单的问题。您有解决的办法吗?