Bash
在非常大的文件的每第 n 行剪切字元串
我這裡有文件 A:
@rand1 ABCDEFBHIJKLM + <<///// @rand2 NOPQRSTUVW + <<//<<< @anotherrand XYZABCDE + <<//<<<
我想要一個包含文件 A 的所有行的輸出,但其中第 2、6、10 行…(模式為 2+n*4)已被修剪為僅包含前 3 個字元。此輸出如下所示:
@rand1 ABC + <<///// @rand2 NOP + <<//<<< @anotherrand XYZ + <<//<<<
我在一個非常大的文件(> 1000 萬行)上執行此操作,並且似乎無法找到一種方法來快速完成此操作。下面的程式碼完成了我想要的,但時間太長了:
r=0 #line number of documentA being read l=2 #line that needs to be trimmed while read line; do r=$(echo $r +1 | bc) echo $r if [ $r == $l ] then echo $line | cut -c -3 >> outputfile l=$(echo $l + 4 | bc) else echo $line >> outputfile fi done < document A
使用 GNU sed(
gsed
在 OSX 上可用)使用“n skip m”地址運算符:sed -E '2~4s/(.{3}).*/\1/' inputfile > outputfile