我想将行转换为linux中的列
我尝试了一些grep命令,但没有成功。
说我的输出文件看起来像
cat file1.txt
Slno : 1
Name : Google
Age : 20
Gender : Male
Exp : 10
Date : 10.10.19
Slno : 2
Name : Yahoo
Age : 21
Gender : Female
Exp : 11
Date : 11.11.19
我希望输出为
Slno Name Age Gender Exp Date
1 Google 20 Male 10 10.10.19
2 Yahoo 21 Female 11 11.11.19
答案 0 :(得分:1)
使用sed
的解决方案如下。
( echo -e 'Slno\nName\nAge\nGender\nExp\nDate'; sed '/^\s*$/d;s/^.*:\s*//g' file1.txt ) | tr '\n' '\0' | xargs -0 -n 6 printf "%s\t%-20s%s\t%s\t%s\t%s\n\n"
执行流程:
首先,使用子外壳回显头,然后sed
读取文件,并删除所有空行以及列名,从而在每个行的基础上将头放在顶部,然后仅是数据。
来自子外壳的空终止行将传递到xargs
。读入一组6个args(列数),然后传递到printf
。
您可以根据可能的字段宽度调整格式字符串。
答案 1 :(得分:0)
在Perl中快速而又肮脏的硬编码hack:
import 'bootstrap/dist/css/bootstrap.css'
答案 2 :(得分:0)
要使用gawk将行转换为列,可以将值放入关联数组中。假设您的数据在file.txt
$ cat file.txt
Slno : 1
Name : Google
Age : 20
Gender : Male
Exp : 10
Date : 10.10.19
Slno : 2
Name : Yahoo
Age : 21
Gender : Female
Exp : 11
Date : 11.11.19
您可以将记录视为由空行分隔(NF> 2),并将列$1
和$3
放入关联数组val
中。
处理完所有记录后,遍历记录数,然后遍历关联数组中的值。因此:
$ awk < file.txt 'BEGIN{rec=1;} {if (NF>2) val[rec][$1]=$3; else rec++;} \
END {for (i=1;i<=rec;i++) {for (j in val[i]) \
{printf "%s ",val[i][j];} printf "\n"; }printf "\n";}' | column -t
10.10.19 10 20 Google Male 1
11.11.19 11 21 Yahoo Female 2