我有一个大型文本文件(2000万条记录),所有行都采用以下格式
task|action||r1_c1|r1_c2|r1_c3
task|action||r2_c1|r2_c2|r2_c3
task|action||r3_c1|r3_c2|r3_c3
task|action||r4_c1|r4_c2|r4_c3
我的要求是从第n行打印第2列,其中n是我的输入。列号是固定的,但行号将根据输入而改变。
输入参数(行号)为3时的预期输出 -
r3_c2
我可以逐行读取文件并读取变量
中的第n行LineOfInterest=$(awk 'NR == n' n=$line $InputFile)
接下来我需要在第4次和第5次管道之间打印值。
我相信可以使用sed
来实现,但现在可以确定如何编写相同的模式。
答案 0 :(得分:1)
答案 1 :(得分:1)
既然你已经提到过Input_file中有数百万行,那么一旦命令符合条件(读取具体提到的行),最好不要读取完整的Input_file,我们可以节省一些时间。
cast(unix_timestamp('08.06.2017/10:20:46', "dd.MM.yyyy/HH:mm:ss") as timestamp)
awk -v line=3 -F"|" 'FNR==line{print $(NF-1);exit}' Input_file
表示Input_file中第二行的第二列,您可以根据需要更改它。同样$(NF-1)
将确保一旦满足此条件,它应该来自命令,我们可以通过不读取大量的Input_file来节省一些周期。
答案 2 :(得分:0)
你要求sed所以你可以尝试
n=3;sed -n "$n"'s/\([^|]*|\)\{4\}\([^|]*\).*/\2/p' infile