我想对我在awk中遇到的问题提供帮助或指导。打印字段'N'到行尾
我有一个带有超过5个字段的制表符分隔的文件。我想输出除前5个字段之外的字段。
请问如何编写awk脚本来完成此任务?
最佳, jianfeng.mao
请注意以下那种评论:
有在我的文件很多领域。不同的行具有不同数量的字段。每行的字段数量不是标准的。
我想对我在awk中遇到的问题提供帮助或指导。打印字段'N'到行尾
我有一个带有超过5个字段的制表符分隔的文件。我想输出除前5个字段之外的字段。
请问如何编写awk脚本来完成此任务?
最佳, jianfeng.mao
请注意以下那种评论:
有在我的文件很多领域。不同的行具有不同数量的字段。每行的字段数量不是标准的。
我同意matchew建议使用cut
:这是适合这份工作的正确工具。但是,如果这仅仅是要成为一个更大的awk
脚本的一部分,这里是如何做到这一点:
awk -F "\t" '{ for (i=6; i<=NF; ++i) $(i-5) = $i; NF = NF-5; print; }
尊敬的user349433,我现在正在尝试从您的awk脚本中学习。非常感谢 – 2011-06-10 16:04:37
在我的制表符分隔的文件temp.txt
它看起来像下面
字段1场2场3字段4字段5字段6
字段1场2场3字段4字段5字段6字段7
字段1场2场3字段4字段5字段6字段7场8
根据您的更新,我强烈建议使用cut
:
cut -f6- temp.txt
将打印field6到行尾。
注意-d
指定了分隔符,但tab是默认的分隔符。 您可以在awk
中做到这一点,但我发现cut
更简单。
随着awk
它应该是这样的:
awk '{print substr($0, index($0, $6))}' temp.txt
如果我的制表符分隔的文件TEMP.TXT如下所示
字段1场2场3字段4字段5字段6
字段1场2场3 field4 field5 field6 field7
field1 field2 field3 field4 field5 field6 field7 field 8
awk -F"\t" '{print $6}' temp.txt
,只打印第6场。如果分隔符是制表符,它可能没有设置-F,但我喜欢在可能的时候设置字段分隔符。
同样如此也会削减。
cut -f6 temp.txt
我有一个预感你的问题有点复杂,那么,如果你回应我的评论,我可以尝试和扩大我的答案。
亲爱的matchew。非常感谢您的帮助。 – 2011-06-10 14:42:39
'cut'很简单,但不处理不一致的分隔符(混合不同的空格)。在awk解决方案中使用'substr'的+1。 – 2011-06-10 15:00:41
perl的方式吗?
perl -lane 'splice @F,0,5;print "@F"'
所以,
echo 'field1 field2 field3 field4 field5 field6' | perl -lane 'splice @F,0,5;print "@F"'
会产生
field6
awk -vFS='\t' -vOFS='\t' '{
$1=$2=$3=$4=$5=""
print substr($0,6) # delete leading tabs
}'
我用-vFS='\t'
而不是-F'\t'
因为AWK的一些实现(如的BusyBox的)不孝敬下,在逃逸后者的结构。
你有一套标准的字段吗?或者实地计数是否有所不同?例如有时6场有时10场? – matchew 2011-06-10 14:35:12
是的,有很多领域。具有不同字段数的不同文件。我不知道他们有多少人。 – 2011-06-10 14:39:50
不要忘记接受回答你的问题的答案。 – ssapkota 2011-06-11 19:16:41