我想對我在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