echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk 'FS="_length" {print $1}'
獲得輸出:AWK字段分隔符不工作的第一線
NODE_1_length_317516_cov_18.568_ID_4005
預期輸出:
NODE_1
這怎麼可能?我錯過了一些東西。
echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk 'FS="_length" {print $1}'
獲得輸出:AWK字段分隔符不工作的第一線
NODE_1_length_317516_cov_18.568_ID_4005
預期輸出:
NODE_1
這怎麼可能?我錯過了一些東西。
當你通過使用awk
線,字段分隔符在處理記錄之前使用。 awk
根據FS
和RS
的當前值讀取記錄,並繼續執行您要求的操作。
這意味着如果您在讀取記錄時設置了FS
的值,則這不會影響該特定記錄。相反,對於下一個或更多。
所以,如果你有這樣的文件:
$ cat a
1,2 3,4
5,6 7,8
並設置字段分隔符,而讀一個記錄,它需要從下一行的效果:
$ awk '{FS=","} {print $1}' a
1,2
5
所以,你想要什麼要做的是在讀取文件之前設置FS
。也就是說,在BEGIN塊或通過參數:
$ awk 'BEGIN{FS=","} {print $1}' a
1
5
$ awk -F, '{print $1}' a
1
5
也有另一種方式:可以awk
重新計算完整的記錄。有了這個,awk
將考慮到當前FS
並採取相應的行動:
$ awk '{FS=","} {$0=$0;print $1}' a
1
5
AWK聲明使用不當
正確的方法是
awk 'BEGIN { FS = "#{delimiter}" } ; { print $1 }'
你的情況,你可以使用
像FS,ORS等必須在一個範圍內設置awk 'BEGIN { FS = "_length" } ; { print $1 }'
內置變量即在以下1個塊中:BEGIN,條件塊或END。
$ echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk 'BEGIN{FS="_length"} {print $1}'
NODE_1
$
您還可以通過使用-F
開關這樣的分隔符:
$ echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk -F "_length" '{print $1}'
NODE_1
$
假設我的第一行是'Cal_Tno_V19_F04_R02'。如何使用'awk'打印'Cal_Tno',即用分隔符打印前兩個字段? – Sigur
@Sigur這似乎是我在這裏回答的完全不同的問題。如果你[提出一個新問題](/ questions/ask)提供足夠的細節,那會更好! – fedorqui