Linux 将行转换为列,将列转换为行
我使用以下代码将行转换为列Linux 将行转换为列,将列转换为行,linux,awk,gawk,Linux,Awk,Gawk,我使用以下代码将行转换为列 awk '/VE464 V4.1.06/{if(s){print s;s=$0}else{s=$0}} /Normal Acq/{s=s";"$0} /SL/{s=s";"$0} /SN/{s=s";"$0} /Gps Status/{s=s";"$0} /GPGGA/{s=s";"$0} /GNGSA/{s=s";"$0} /GPZ
awk '/VE464 V4.1.06/{if(s){print s;s=$0}else{s=$0}}
/Normal Acq/{s=s";"$0}
/SL/{s=s";"$0}
/SN/{s=s";"$0}
/Gps Status/{s=s";"$0}
/GPGGA/{s=s";"$0}
/GNGSA/{s=s";"$0}
/GPZDA/{s=s";"$0}
/PTNL/{s=s";"$0}
/TB/{s=s";"$0}
END{print s}' input.txt
我的输入数据如下(input.txt):
然后,我得到的代码输出是(行转置为列,列之间用;)
在对前一个输出执行某些处理后,我将获得(干净的输出):
然后,使用上一个文件将要从列转换到行,保持与原始文件(input.txt)相同的格式
最终输出应如下所示:
% VE464 V4.1.06
% Normal Acq
% SL : 30391.00
% SN : 48097.00
% Gps Status : $GPGGA,034403.00,2059.56495319,N,05034.47277356,E,5,15,0.7,207.283,M,-32.341,M,1.0,0000*6
% GNGSA : $GNGSA,A,3,87,72,65,66,88,81,78,,,,,,1.6,0.7,1.5*27
% GNGST : $GNGST,034403.00,0.001,0.053,0.046,127.2,0.049,0.050,0.017*44
% GPZDA : $GPZDA,034403.02,25,11,2017,00,00*67
% PTNL : $PTNL,GGK,034403.00,112517,2059.56495319,N,05034.47277356,E,12,15,1.6,EHT174.943,M*4C
% TB : 17/11/25 03:43:51:732000 [13431732000 microsec]
% VE464 V4.1.06
% Normal Acq
% SL : 30387.00
% SN : 48161.00
% Gps Status : $GPGGA,035313.00,2059.54233727,N,05034.93011171,E,5,14,0.7,199.952,M,-32.341,M,1.0,0000*
% GNGSA : $GNGSA,A,3,20,25,18,29,15,10,26,21,,,,,1.7,0.7,1.6*2F
% GNGST : $GNGST,035313.00,0.001,0.053,0.046,138.5,0.050,0.049,0.017*4A
% GPZDA : $GPZDA,035313.01,25,11,2017,00,00*63
% PTNL : $PTNL,GGK,035313.00,112517,2059.54233727,N,05034.93011171,E,12,14,1.7,EHT167.612,M*4F
% TB : 17/11/25 03:53:01:180000 [13981180000 microsec]
如果这可以改进并且更简单,并且使用最后一个(干净的输出)从列到行的转置,请检查我的代码以从行转置到列好吗?您不需要太多编程
$ tr ';' '\n' <file
在记录之间添加空行的步骤
$ sed '$!G' file | tr ';' '\n'
假设记录之间有空行,转换为列可以简化为
$ awk -F'\n' -v RS= -v OFS=';' -v ORS='\n' '{$1=$1}1' file
很好,如何改进代码,我必须将行转换为以行分隔的列;是否有可能像我在代码中所做的那样,将其作为数组来执行,以便能够选择一些行而不是全部行。例如,每个补丁的第3、4和10行(每次VE464中出现中断时,我都会调用补丁)。我的代码可以工作,但如果有其他选择。我相信它就在那里。请你分享一下。。感谢这是一个有点不具体的描述:
在我对之前的输出进行一些处理之后。
如果您解释过滤步骤的标准,我非常确定根本不需要转置。也许它可以通过sed
regex来完成。请详细说明从4到2的过滤步骤。您好。我们社区中的许多人有时会说,每当他们看到关于软件工程师的性别假设时,他们担心人们感到被排斥。我想知道,你能不能尽量避免在你的帖子中添加以男性为中心的问候语和代词,从而营造一个更受欢迎的环境?非常感谢。
$ tr ';' '\n' <file
% VE464 V4.1.06
% Normal Acq
% SL : 30391.00
% SN : 48097.00
% Gps Status : $GPGGA,034403.00,2059.56495319,N,05034.47277356,E,5,15,0.7,207.283,M,-32.341,M,1.0,0000*6
% Gps Status : $GPGGA,034403.00,2059.56495319,N,05034.47277356,E,5,15,0.7,207.283,M,-32.341,M,1.0,0000*6
% GNGSA : $GNGSA,A,3,87,72,65,66,88,81,78,,,,,,1.6,0.7,1.5*27
% GPZDA : $GPZDA,034403.02,25,11,2017,00,00*67
% PTNL : $PTNL,GGK,034403.00,112517,2059.56495319,N,05034.47277356,E,12,15,1.6,EHT174.943,M*4C
% TB : 17/11/25 03:43:51:732000 [13431732000 microsec]
% VE464 V4.1.06
% Normal Acq
% SL : 30387.00
% SN : 48161.00
% Gps Status : $GPGGA,035313.00,2059.54233727,N,05034.93011171,E,5,14,0.7,199.952,M,-32.341,M,1.0,0000*
% Gps Status : $GPGGA,035313.00,2059.54233727,N,05034.93011171,E,5,14,0.7,199.952,M,-32.341,M,1.0,0000*
% GNGSA : $GNGSA,A,3,20,25,18,29,15,10,26,21,,,,,1.7,0.7,1.6*2F
% GPZDA : $GPZDA,035313.01,25,11,2017,00,00*63
% PTNL : $PTNL,GGK,035313.00,112517,2059.54233727,N,05034.93011171,E,12,14,1.7,EHT167.612,M*4F
% TB : 17/11/25 03:53:01:180000 [13981180000 microsec]
$ sed '$!G' file | tr ';' '\n'
$ awk -F'\n' -v RS= -v OFS=';' -v ORS='\n' '{$1=$1}1' file