Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql awk&x27;{print$<;number>;}';但不知道<;数量>;事先_Sql_Shell_Awk - Fatal编程技术网

Sql awk&x27;{print$<;number>;}';但不知道<;数量>;事先

Sql awk&x27;{print$<;number>;}';但不知道<;数量>;事先,sql,shell,awk,Sql,Shell,Awk,使用管道到awk每行打印一个特定列是可以的 但是如果我不知道它是哪一列,我该怎么做,除非我必须得到第一行与某个内容匹配的列 例如 Title1 Title2 TargetTitle Title3 x y z a b c d e 在上表中,我只想过滤掉: Z d 但是,有两个问题 1) 我不知道确切的列号 2) 我不想要第一排(没什么大不了的,我只需要sed行2到$) 谢谢。您可以使用a

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

但是如果我不知道它是哪一列,我该怎么做,除非我必须得到第一行与某个内容匹配的列

例如

Title1  Title2  TargetTitle  Title3
   x      y         z           a
   b      c         d           e
在上表中,我只想过滤掉: Z d

但是,有两个问题 1) 我不知道确切的列号 2) 我不想要第一排(没什么大不了的,我只需要sed行2到$)


谢谢。

您可以使用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
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
awk -v title="TargetTitle" 'NR==1 { for (i=1;i<=NF;++i) if ($i==title) col=i }
NR>1 { print $col }' file

awk-vofs='\t''NR>1{for(i=1;i要过滤掉一列,可以使用如下内容:

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
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
awk -v title="TargetTitle" 'NR==1 { for (i=1;i<=NF;++i) if ($i==title) col=i }
NR>1 { print $col }' file
例如,如果要在输出中的每列之间添加更多空间,可以更改OFS
变量的值,或将第一个格式说明符从
%s
更改为
%4s

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

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

你能详细说明一下这个“谁的第一行与什么匹配的列”吗?你期望的输出是什么?