awk'{print $ <number>}'但不知道<number>之前的</number> </number>

时间:2014-08-26 13:45:08

标签: sql shell awk

使用管道到awk每行打印一个特定列是可以的。

但如果我不知道它是哪一列,我怎么办呢,除非我必须得到第一行匹配的列。

实施例

Title1  Title2  TargetTitle  Title3
   x      y         z           a
   b      c         d           e

上表中,我只想过滤掉: ž d

但是,有两个问题 1)我不确切知道列号 2)我不想要第一排(不是什么大不了的,我可以把第2行打到$)。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用awk构建输出:

awk -v OFS='\t' 'NR>1{for (i=1; i<=NF; i++) {
                 if ($i=="b"||$i=="d") $i=""; printf "%s%s", $i, (i==NF)?ORS:OFS}}' file
x   y   z   a
    c       e

答案 1 :(得分:0)

要筛选出一列,您可以使用以下内容:

awk -v title="TargetTitle" 'NR==1 { for (i=1;i<=NF;++i) if ($i==title) col=i }
NR>1 { for (i=1;i<=NF;++i) if (i!=col) printf "%s%s", $i, (i<NF?OFS:ORS)}' file

输出:

x y a
b c e

如果要在输出中的每列之间添加更多空格,可以更改OFS变量的值或将第一个格式说明符从%s更改为%4s,示例

如果您只想打印一列,可以执行以下操作:

awk -v title="TargetTitle" 'NR==1 { for (i=1;i<=NF;++i) if ($i==title) col=i }
NR>1 { print $col }' file

输出:

z
d