我有一個包含數千列的大文件。我想用Bash中的AWK一次刪除一些特定的列和字段分隔符。如何在AWK中一次刪除多個列和字段分隔符?
我可以一次刪除一列與此oneliner(第3列將被刪除,其對應的字段分隔符):
awk -vkf=3 -vFS="\t" -vOFS="\t" '{for(i=kf; i<NF;i++){ $i=$(i+1);}; NF--; print}' < Big_File
不過,我想一次刪除多個列...可有人幫我弄清楚這一點?
我有一個包含數千列的大文件。我想用Bash中的AWK一次刪除一些特定的列和字段分隔符。如何在AWK中一次刪除多個列和字段分隔符?
我可以一次刪除一列與此oneliner(第3列將被刪除,其對應的字段分隔符):
awk -vkf=3 -vFS="\t" -vOFS="\t" '{for(i=kf; i<NF;i++){ $i=$(i+1);}; NF--; print}' < Big_File
不過,我想一次刪除多個列...可有人幫我弄清楚這一點?
您可以通過列的列表,從外殼被刪除awk
這樣的:
awk -vkf="3,5,11" ...
然後在awk
PROGRAMM解析成數組:
split(kf,kf_array,",")
,然後我們將向您所有的colums並測試每個特定列是否在kf_array中,並且可能跳過它
其他可能性是打電話給你的oneliner服務器人的時間:-)
如果您可以使用cut
代替awk
,這一個是cut
簡單:
例如由此得出的列1,3和50從文件:
cut -f1,3,50- file
像這樣的東西應該工作:
awk -F'\t' -v remove='3|8|5' '
{
rec=ofs=""
for (i=1;i<=NF;i++) {
if (i !~ "^(" remove ")$") {
rec = rec ofs $i
ofs = FS
}
}
print rec
}
' file
不,不是這樣的。在這裏你選擇特定的列,而不是間隔內的列... – Bebe
我不同意。在上述兩個問題中,都會出現刪除範圍和列表的答案。 – Thor
AWK,我真的找不到它...... – Bebe