我在这里遇到了一个问题。我必须使用awk打印文本文件中的一列。但是,这些列根本没有用空格分隔,只使用了一个逗号。看起来像这样:
column1,column2,column3,column4,column5,column6
如何使用awk打印出第三列?
6l7fqoea1#
试试看:
awk -F',' '{print $3}' myfile.txt
在这里,在-F中,您要对awk说使用,作为字段分隔符。
-F
awk
,
62lalag42#
如果您唯一的要求是打印每行的第三个字段,并且每个字段用逗号分隔,则可以使用cut:
cut -d, -f3 file
-d,
-f3
z2acfund3#
试试这个awk
awk -F, '{$0=$3}1' file column3
$0=$3
3
1
这也可以用于:
awk -F, '{print $3}' file
bq3bfh9z4#
bash中的一个简单但awk较少的解决方案:
while IFS=, read -r a a a b; do echo "$a"; done <inputfile
对于小文件(〈100行),它比awk运行得更快,因为它使用的资源更少(避免调用昂贵的fork和execve系统调用)。来自Ed Morton的编辑(抱歉劫持了答案,我不知道是否有更好的方法来解决这个问题):要消除shell在处理小文件时比awk运行得快的错误认识:
fork
execve
$ 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
我希望如果你得到一个足够小的文件,那么你会看到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 $
daupos2t5#
您也可以使用sed,例如:echo '"A","B","C"'| sed -e 's/\([^,]*\),\([^,]*\),\([^,]*\)/\3 \2 \1/'将输出"C" "B" "A"
sed
echo '"A","B","C"'| sed -e 's/\([^,]*\),\([^,]*\),\([^,]*\)/\3 \2 \1/'
"C" "B" "A"
5条答案
按热度按时间6l7fqoea1#
试试看:
在这里,在
-F
中,您要对awk
说使用,
作为字段分隔符。62lalag42#
如果您唯一的要求是打印每行的第三个字段,并且每个字段用逗号分隔,则可以使用cut:
-d,
将分隔符设置为逗号-f3
指定只打印第三个字段z2acfund3#
试试这个
awk
,
将字段除以,
$0=$3
将行设置为仅字段3
1
打印全部输出。(explained here)这也可以用于:
bq3bfh9z4#
bash中的一个简单但awk较少的解决方案:
对于小文件(〈100行),它比awk运行得更快,因为它使用的资源更少(避免调用昂贵的
fork
和execve
系统调用)。来自Ed Morton的编辑(抱歉劫持了答案,我不知道是否有更好的方法来解决这个问题):
要消除shell在处理小文件时比awk运行得快的错误认识:
我希望如果你得到一个足够小的文件,那么你会看到shell脚本比awk脚本运行得更快,但谁在乎呢?
如果您不认为编写健壮的shell脚本比编写awk脚本更难,请查看您发布的shell脚本中的错误:
daupos2t5#
您也可以使用
sed
,例如:echo '"A","B","C"'| sed -e 's/\([^,]*\),\([^,]*\),\([^,]*\)/\3 \2 \1/'
将输出"C" "B" "A"