【发布时间】:2014-02-14 05:44:18
【问题描述】:
我有这个问题,我需要为同一个文件同时打印2行,问题是它必须在第一列的行更改之后发生,例如:
文件:abcd.csv
a,1
a,2
a,3
a,4
a,5
a,6
b,1
b,2
b,3
b,4
b,5
b,6
c,1
c,2
c,3
c,4
c,5
c,6
代码:
awk '{ if ( $1 == "a") print $1,$2 } ' FS="," abcd.csv
哪个打印:
a 1
a 2
a 3
a 4
a 5
a 6
但我同时需要两行,因为我需要将这两行传递给另一个调用:
第一个输出(然后它们将被发送):
a 1
a 2
第二个输出(然后它们将被发送):
a 2
a 3
第三个输出(然后它们将被发送):
a 3
a 4
第四个输出(然后它们将被发送):
a 4
a 5
第 5 个输出(然后它们将被发送):
a 5
a 6
第一列中的其他字母依此类推。
我会很感激这方面的任何提示,
【问题讨论】:
-
这个必须在
awk吗? -
您需要将每条过渡线加倍吗?当第二个字段在两行之间没有变化时会发生什么
a 1a 2a 2a 3? -
所以你想每次调用你的awk,你有两行,第一行1,2,然后3,4 ...也就是说,如果你调用100次,你解析文件100 次...我建议您使用 grep/awk... 来获取您需要的所有行,然后使用循环处理那个较小的集合。
-
@Gery 即使您的文件只有 4 行,这也是最糟糕的工作方式。并不容易,你仍然需要循环,你仍然需要将变量传递给 awk 让它知道哪一轮。如果你知道你走错了路,而且没有节省精力,但你继续前进……我只能说“祝你好运”
-
您的附加电话是什么样的?你说你必须将结果传递给另一个调用。如果您告诉我们更多有关您的设置的信息,也许所有事情都可以通过一个
awk脚本完成。