使用管道到awk每行打印一个特定列是可以的。
但如果我不知道它是哪一列,我怎么办呢,除非我必须得到第一行匹配的列。
实施例
Title1 Title2 TargetTitle Title3
x y z a
b c d e
上表中,我只想过滤掉: ž d
但是,有两个问题 1)我不确切知道列号 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