用AWK打印列名

6

我尝试打印奇数列,但是失败了!

awk '{for (i=1; i<=NF; i++) print $2*i-1}' file > test

但是它把所有内容都打印在一列里!

您能帮我吗?

谢谢

1个回答

8

只需使用i+=2

awk '{ for (i=1;i<=NF;i+=2) print $i }' file > test

针对新要求,只需将“even”列设置为空值:
awk '{ for (i=2;i<=NF;i+=2) $i="" }1' file > test

我刚找到了它,但又出现了另一个问题。所有内容都将在一列中。 - EpiMan
请问您为什么在}后面加了1? - EpiMan
1
@MaryamSani:结尾的 1 强制 awk 对每行返回 true,从而实现打印每一行。与 awk '{ for (i=2;i<=NF;i+=2) { $i="" } print $0 }' file > test 相同,只是更加 awkish。希望有所帮助。 - Steve
一个小问题是,这个 print $0 在每一列后面都添加了 OFS,即使该列包含空值。 - Marek Židek
1
@MarekŽidek 如果你需要完全去除这些列,另一个解决方案是在循环结束后建立一个奇数列的记录,并将其打印出来:awk '{ for (i=1; i<=NF; i+=2) { r = (r ? r OFS : "") $i }; print r; r="" }' file - Steve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接