awk第一行不工作删除列

时间:2014-03-03 11:06:43

标签: awk

我正在尝试使用以下代码从文件的所有行中删除第26行以外的列:

awk '{ FS = ";" ; for(i=1;i<NF;i++) if (i<26) printf $i FS}{print $26}'

它在所有行中都运行良好,但是对于第一行,它显示了另外两个字段(并将最后一个字段切成两个)。

我的代码有什么问题吗?

非常感谢

3 个答案:

答案 0 :(得分:3)

这是因为你在每一行设置FS,而它应该在BEGIN{}块中(或作为参数在外面,就像其他答案正确建议一样):

awk 'BEGIN{FS=";"} {for(i=1;i<NF;i++) if (i<26) printf $i FS}{print $26}' file

事实上,为了实现目标,使用cut更容易:

cut -d';' -f-26 file
       ^    ^^^
       |    all fields up to the 26th
       delimiter

4 cols

的示例

示例文件:

$ cat a
1col1;col2;col3;col4;col5;col6
2col1;col2;col3;col4;col5;col6
3col1;col2;col3;col4;col5;col6

上一个代码:

$ awk '{FS=";"; for(i=1;i<NF;i++) if (i<4) printf $i FS}{print $4}' a

2col1;col2;col3;col4
3col1;col2;col3;col4

新代码:

$ awk 'BEGIN{FS=";"} {for(i=1;i<NF;i++) if (i<4) printf $i FS}{print $4}' a
1col1;col2;col3;col4
2col1;col2;col3;col4
3col1;col2;col3;col4

cut

$ cut -d';' -f-4 a
1col1;col2;col3;col4
2col1;col2;col3;col4
3col1;col2;col3;col4

答案 1 :(得分:3)

您可以尝试此awk

awk -F';' 'NF>26{NF=26}1' OFS=';' yourfile

答案 2 :(得分:0)

@fedorqui是对的。

但您也可以使用它来设置字段分隔符:

awk -F";" '{for(i=1;i<NF;i++) if (i<26) printf $i FS}{print $26}' file