如何用awk将整列的数据转换成多列

比如下面这个文件中的数据
[1]
23
56
89
[2]
78
76
65
[3]
56
34
41
[4]
19
16
67
·
·
·
转换成
[1] [2] [3] [4] ···
23 78 56 19 ···
56 76 34 16 ···
89 65 41 67 ···
因为数据文本里面的数据比较多,所以程序是可以处理大量数据的。

0

3个回答

假设你的文件很规律,每4行一个循环:

awk '
{
if (NR % 4 == 1) {arr[1]=arr[1]" "$1} 
else if (NR % 4 == 2) { arr[2]=arr[2]" "$1}
else if (NR % 4 == 3) {arr[3]=arr[3]" "$1}
else {arr[4]=arr[4]" "$1}
}
END{
printf ("%-s\n %-s\n %-s\n %-s\n",arr[1],arr[2],arr[3],arr[4])
}' a.txt | column  -t
[1]  [2]  [3]  [4]
23   78   56   19
56   76   34   16
89   65   41   67

用递归函数也可以,不过比较复杂一些

0
qq_39647357
qq_39647357 回复a905815661 老铁 直接发个完整点的吧 新人不会这操作
大约一年之前 回复
a905815661
骏马金龙 回复qq_39647357: 那就用循环,从每个[N]开始,计数器+1,每个循环结束的时候计数器置为0。最后在END中通过遍历数组的方式来输出。
大约一年之前 回复
a905815661
骏马金龙 回复qq_39647357: 那就用循环,从每个[N]开始,计数器+1,每个循环结束的时候计数器置为0。最后在END中通过遍历数组的方式来输出。
大约一年之前 回复
qq_39647357
qq_39647357 抱歉啊可能是我没说清楚。文件是很规律,但是不仅仅局限于4行一个循环,这方面的需要怎么操作
大约一年之前 回复
0
qq_39647357
qq_39647357 这个只能是少量的数据 列多了就不行了
大约一年之前 回复
 awk '
BEGIN{OFS="\n"}
{
    if ( $1 ~ /\[/ ) {
        cnt=0
        arr[cnt]=arr[cnt]" "$1
    } else {
        cnt=cnt+1
        arr[cnt]=arr[cnt]" "$1
    }
}
END{for ( i in arr ) { print arr[i]}
}' a.txt | column -t 

适合每个[N]段落都是4行、5行、6行......一循环的情况

如果是一会4行、一会5行、一会6行的情况,我想awk实现起来会非常非常复杂。可以考虑用编程语言实现。

0
qq_39647357
qq_39647357 还是不可以啊 老铁 = = https://zhidao.baidu.com/question/1760366755251744948.html 我在尝试着改这个的输出方式 还没有成功
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
利用shell中awk和xargs以及sed将多行多列文本中某一列合并成一行
一、问题描述 最近需要利用Shell将多行多列文本中某一列,通过指定的分隔符合并成一行。假设需要处理的文本如下: 我们主要处理的是,将用户名提取处理,合并成一行,并通过逗号进行分隔。最终的格式如下: “li1”,”huan”,”wang”,”wu”,”78c”,”zh”,”liu”,”zhao”,”xu”,”yang” 二、解决方案 首先是提取每一行的第X列,我最先能够想到的是a
shell awk 多列求和
2016-04-12 14:05,5726,10085 2016-04-12 14:41,14628,17341 2016-04-12 14:42,19893,15488 2016-04-12 14:42,19893,7852 2016-04-12 14:43,20471,23041 这是格式化输出 如果不加\n换行,会把把结果输出到一行,如下图 paste -d, a.txt ...
Linux使用awk命令在显示指定的多列时让其分隔开
awk  -F   ':'    '{print $1“”}'
linux awk 按多列 去重 来统计数据之妙用
这是我日常工作统计日志用到的,现记录下: 比如有这样一个日志:   需要统计push,的点击数量,按cookie去重,因为一个设备可能点击多次   第一步,先看看这几列,打印出来看看, awk -F "," '{print $2" "$3" "$6" "$7" "$9}' pushLog.log     第二步,按上面的几列去重 awk -F "," '!a[$2
awk按列合并示例
需求:将如下文本按第一列为主key,将相同的第二列值追加到同一行cat input.log ofB8Mt-5i_308H0LALOc-tsk1Aqg 2488 ofB8Mt-5i_308H0LALOc-tsk1Aqg 2620 ofB8Mt-j2usddmbu5_WrL3xitQ4o 2551 ofB8Mt-j2usddmbu5_WrL3xitQ4o 2582 ofB8Mt00DhYwMOpJvG...
awk做列求和
日志格式:2018-05-16 11:29:23.999 [pool-1-thread-8] INFO  com.lsh.kafka.KafkaConsumerTest[KafkaConsumerTest.java:101] - Get data from kafka successfully. Datacount: 99命令:cat root.log | grep "11:29:23"| awk...
awk合并两个文件的列
问题描述:两个文件a.dat, b.dat   a.dat 0    100 1    99 2    93 3    90 ...   b.dat 0   0 1   3 2   0 3   2 ....   如果两个文件中第一列的元素相同,则相对应行的第二列元素相加,即 0    100 1    102 2    93 3    92 ... ...
mysql 固定多行转一列
图一 图二 本来想实现图一到图二的效果,通过下面这段代码可以实现 select substring_index(group_concat(dt1),',', 1) dt1,substring_index(substring_index(group_concat(dt1),',', 2),',', -1)dt2,substring_index(group_concat(dt1),','
Pandas DataFrame将多列数据一次性从object转换为datetime
从CSV文件中读取数据后,很多日期类型数据为object。为了批量将这几列转换为datetime。怎么做呢? 一、找出df的列名中有“date”日期的列 datel=[] for x in df.columns.tolist(): if 'date' in x: datel.append(x) 二、用apply批量修改 df[datel]=df[datel]....
调试经验——在Excel中使用OFFSET函数将多行多列数据转换成单列数据(Transform data block to single column)
需求说明:需要将下表中C列的内容按逗号拆分成独立的单元格。首先想到的方法是使用Excel的分列功能(Textto Column),将C列拆分成多行多列,如下所示。剩下的问题就是:如何将这个分列后的数据块串联成一个单列数据?可使用Offset函数满足此需求。(在Excel中,OFFSET函数的功能为以指定的引用为参照系,通过给定偏移量得到新的引用。) 具体步骤:1.      观察到分列后有很多空的...
使用awk将两字段合并
有文档a.txt如下: 861399 4444623*** 861339 4444660*** 861339 4444660*** 861339 4444671*** 861339 4444672*** 861339 4444690*** 861339 4444692*** 861530 4444863*** 使用awk将两列合并,并去掉第一列的86及第二列的444,结果如下:
awk 替换文本中某一字段
#cat $fileinp| awk '/$varkey/{$3=$var1}1{print $0}' filetmp ;mv filetmp $fileinp   #cat $fileinp | grep 'Basis_ome_bat' | awk '$3="222" {print $0}'    ### awk '/Basis_ome_bat/{$2=$2+300}1' file 1
awk将字符串转为数字的方法
http://unix-cd.com/vc/www/39/2010-11/17295.html 在awk里不论字符串还是数字都被视为字符串;请理解“awk 变量“字符串化”是因为所有 awk 变量在内部都是按字符串形式存储的。同时,awk 变量是“简单的”,因为可以对它执行数学操作,且只要变量包含有效数字字符串,awk 会自动处理字符串到数字的转换步骤” 特别地,字符在参与运算时被视为0
awk 分组求和
分组求和 awk -F '|' '{s[$1] += $2} END{for(i in s) print i, s[i]} }' > test
excel将多列数据以连接符‘*’连接成一列
多列数据连接
用XSL把XML的数据转换成完美的多列表格形式
摘要:本文通过实际的例子来说明如何在XSL中实现对XML数据转换成完美的多列表格。在利用XSL对XML进行转换时,有时候需要把XML转换成多列的Table元素,这个问题经常会困扰许多人,如果不生成Table的话,只需要对循环中的节点进行位置取模后判断,然后用换行即可。但有时候为了用户需要和界面的美观,需要生成多行多列的Table,常用的方法是采用following-sibling进行判断,比如下面
awk指定多列排序
示例:cat testFile |sort -t '|' +0 -1 +1 -2 使用sort排序,使用-t指定分隔符 上述示例为:以“|”分隔,根据第一行和第二行排序
awk实现多行合并
需求 文件每一行有两列,需要将第一列相同的行合并。 例如: 111:aaa 22:bbb 22:ccc 合并之后变为 111:aaa 22:bbbccc 实现 例如:文件名为test.txt cat test.txt awk -F ':' '{a[$1]=a[$1]$2END{for(i in a) print i":" a[i]}}' ...
awk文件每一行所有列数据求和
问题描述: 文件每一行的所有列累加得到总和   例如: 1  3  5 2  4  6 得到 9 12   $ awk 'BEGIN{a[$1]=0}{for(i=1; i<=NF; i++) a[$1]+=$i}END{for(j in a) print j" " a[j] > "output.dat"}' <input.dat  ...
数据库一列多行转一行多列
如题: select max(case when name='1' then [temp] else null end) as temp1 , max(case when name='2' then [temp] else null end) as temp2,  max(case when name='3' then [temp] else null end) as
UltraEdit 操作小技巧--一次性修改多列
今天和同事学了一招~~ 有的时候,我们需要一次性把文本的很多列进行相同的操作,比如文本有10000行,现在需要在每一行前面加一个单引号',肯定不可能手工一行一行的增加,这时候可以利用UE的“列操作功能”来处理。 在文本的某一行要插入字符的位置之前(本例中为第一行第一个字符之前),按下ALT+C,切换到列操作状态,(默认是行操作状态,每次按ALT+C可以切换状态),此时用鼠标向下拖动,会看见一条
把数据转换成sql(awk实现)
把数据转换成sql语句,主要用户移植数据库的时候使用,或批量插入数据的时候使用 方法如下(数据格式的分隔符为tab): 1.用ultraedit编辑器最简单,只需简单的替换就行了,^t替换为',',^p替换为')^p,列模式下在每行的开始处输入insert .... (' . 2.用脚本实现,如sed,awk等命令,在linxu下使用脚本前先使用dos2unix命令把数据的文本文件转换一下,...
mysql 字符串转多列数据
创建函数 zoe_split SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON GO CREATE FUNCTION [dbo].[zoe_split] ( @c VARCHAR(8000) , @split VARCHAR(2) ) RETURNS @t TABLE ( col VARCHAR(MAX) )
linux awk 多行转为一行
linux awk 多行转为一行 在文件ipfiles.txt文件中包括若干行IP,每行只有一个IP,使用脚本使每五行转为一行; [ljs@MyPcCentOs6 temp]$ more ipfiles.txt 192.168.7.98 192.168.7.99 192.168.7.110 192.168.7.111 192.168.7.112 192.168.7.113
linux 用awk gsub将一行变成多行
原数据 103153926#1180545867#1337681140#1358188028#1445076068#1527059220#1625614569#1890561581#19584762#2214121812#2342720441#2500121842#25326345#2640225664#409811166#461094177#596719064#611522202#741345
awk 中字符串转数字
在awk中,将数字字符串转换成数字的方法:     id="1245";     当我们需要id是数字时,     id=id+0;
Pandas技巧:将一列分隔成多个列
项目中遇到一个问题,搜集的数据只有一列,每行的数据都是通过特殊字符分隔,现在需要将其分隔成多个列。 原始数据如下: 0 0 155,NA,0,10,-99999,18,18,18,04,NA,0,-99999... 1 728,NA,24.1,74.81,-9999,18,18,18,-99999,... 这是前两行的数据。原本使用特殊字符分隔的,这个好处理,只需通过string的repl...
pandas 多列判断转换成一列
  如果熟悉sql,想要多列转换同时操作还可以试试 pandasql ,直接面向sql编程,缺点是有bug。
如何用VFP把TXT转换成dbf
如何用VFP把TXT转换成dbf,如何用VFP把TXT转换成dbf,如何用VFP把TXT转换成dbf
awk的用法二 ---内部的横排与竖排
使用awk来完成一些好玩的东西下面是一个awk打印一个等腰三角形的例子[root@dqysh020073 ~]# echo 1|awk '{for(i=1;i<=5;i++){for(k=5;k>i;k--)printf " ";for(j=2*i-1;j>1;j--)printf '1';print }}'延伸一:awk的横排[root@dqysh020073 ~]# echo...
awk将时间转换为毫秒
  awk将时间转换为毫秒:   #!/bin/bash if [ $# -lt 1 ]; then echo "usage: $0 filename" exit 1 fi grep ":" ca_server.log | \ sed 's/\t/ /g' | \ awk -F' ' 'BEGIN{OFS=",";} {print $1,$3,$6}' |...
awk将文件某个列按照逗号分隔
概述 当我们在处理线上故障的时候,经常会从数据库表查询出某个列。 select product_id from order where user_id = 111; 查询出来的结果形式如下: 1 2 3 4 5 这个时候,我们通常会以 product_id in (1,2,3,4,5) 的形式去查找商品表,找出商品的详细信息。那么如何得到这个(1,2,3,4,5)呢。一种简单的做法就是利用...
shell awk转成数组
在编写shell时,需要将awk转换成合适的数组类型: ( $(echo `cat $file | awk '{print $1}'`))
oracle 列转行 多行数据转为一行
 主key 有5个,【A    B    C    D   E   】 select STN_CD,replace(wm_concat(E),',','、') from T_G1_SHITEN_ORDER where A= '000' and B = 'C01' and C = 1 and D= 'K02' group by A
awk命令计算一列数值的总和,平均值,最大值,最小值
求和: grep '' *.log | awk -F '(ms)' '{print $1}' | awk -F '' '{print $2}' | awk -F '(' '{print $1}' | awk '{print $1}' | awk '{sum+=$1}END{print sum}' 某列最大值: grep '' *.log | awk -F 't
python对一列数据转换类型(可用于取整)
data[‘second’] = data[‘second’].astype(int)
查询的时候将多行和并为一行的多列
问题描述:  开发过程中往往查询出来的内容是多列,但是因为框架中的grid的原因需要将这多行设置为一行中的多列,思路是通过case when转换将多行转换为一行中的多列。 表结构和表结构如下: 统计各个类型的数量,将其放入echarts或grid中,一般的根据类型统计的SQL如下: select t.type,sum(1) num from test t group by
SQL中如何根据分隔符将表字段中一列转多列
如何将表字段一列转多列呢!可以用PARSENAME函数拆分字符串,但是Parsename函数上限只能处理4列,多列该怎么处理呢? 比如表字段A: a1,b2,c3,d4,e5,转换成多列呢!
11、python字段分列、一列字符窜拆分成多列
字段拆分: 按照固定的字符,拆分已有字符窜 1 字段分割函数: split(sep,n,expand=false)     sep 用于分割的字符窜     n  分割为多少列     expand 是否展开为数据框,默认为false     如果为true 则返回数据框      2 案例: 对字符窜进行处理 newDF=df['name'].str.split('',1,true) ...
awk删除文件的某一列
cat file |awk ' { $5=null;print $0 }'
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 java如何用深度学习 如何用aws学习大数据