Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将行转换为列,将列转换为行_Linux_Awk_Gawk - Fatal编程技术网

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