我有一个文本文件,其中包含十六进制值,在一行中有一个值。文件具有许多这样的值,一个在另一个之下。我需要对我需要的值进行一些分析,但某些分隔符/标记在行号32,47,62,77之前在此文件中表示'#'...此图形中两个行号之间的差异总是15岁。
我正在尝试使用awk。我尝试了一些东西,但没有工作。
awk中的命令是什么?
也欢迎涉及其他语言/脚本/工具的任何其他解决方案。
谢谢。
-AD
答案 0 :(得分:2)
这就是你可以使用AWK的方法,
awk 'BEGIN{ i=0; } \
{if (FNR<31) {print $0} \
else {i++; if (i%15) {print $0} else {printf "#%s\n",$0}}\
}' inputfile.txt > outputfile.txt
工作原理,
32
#
)
FNR
是一个计算它们的AWK变量i%15
每隔15行#
前缀$0
按原样打印记录(行)您可以在一个命令行中使用空格键入所有带有空白“\
”的文本。
或者,您可以将其用作AWK文件,
# File: comment.awk
BEGIN{ i=0; }
$0 ~ {\
if (FNR<31) {print $0} \
else {\
i++; \
if (i%15) {\
print $0
}\
else {\
printf "#%s\n",$0
}\
}\
}
然后运行它,
awk -f comment.awk inputfile.txt > outputfile.txt
希望这可以帮助您使用更多AWK。
答案 1 :(得分:0)
的Python:
f_in = open("file.txt")
f_out = open("file_out.txt","w")
offset = 4 # 0 <= offset < 15 ; first marker after fourth line in this example
for num,line in enumerate(f_in):
if not (num-offset) % 15:
f_out.write("#\n")
f_out.write(line)
答案 2 :(得分:0)
offset = 31;
chunk_size = 15;
main = do
{
(h, t) <- fmap (splitAt offset . lines) getContents;
mapM_ putStrLn h;
mapM_ ((putStrLn "#" >>) . mapM_ putStrLn) $
map (take chunk_size) $
takeWhile (not . null) $
iterate (drop chunk_size) t;
}