linux 如何使用bash命令将文件中的多个列合并为单个列?

gopyfrb3  于 12个月前  发布在  Linux
关注(0)|答案(3)|浏览(125)

此问题在此处已有答案

How to print columns one after the other in bash?(7个答案)
5年前关闭。
我有一个包含三个不同列的文本文件。我想通过将所有这些列合并为一个单独的列来创建另一个文件。
我的文件看起来像这样

mep_kylo_campaigns               mep_primecastaccount        mep_flightstatus
nqs                              tod_do                      gandhi_sub_data 
kylo_register                    policy_record               mep_kylo_jobs   
mep_note                         msg_store                   mep_feature     
nqs_aside                        tbl_employee                mep_profile

字符串
我想要这样的输出

mep_kylo_campaigns                       
nqs                                                     
kylo_register                                      
mep_note                                                 
nqs_aside                                           
mep_primecastaccount
mep_flightstatus
tod_do
policy_record
msg_store
tbl_employee
gandhi_sub_data
mep_kylo_jobs
mep_feature
mep_profile

iq3niunx

iq3niunx1#

这是一种方法,但顺序不一样:

$ cat file | tr -s ' ' '\n'
mep_kylo_campaigns
mep_primecastaccount
mep_flightstatus
...

字符串

更新:由于猫的无用使用被建议在这里是另一种形式:

$ < file tr -s ' ' '\n'

更新2:上面的解决方案只适用于列之间用空格分隔的情况,不适用于选项卡。下面的解决方案适用于两者-至少在GNU tr上是这样的:

$ < file tr -s '[:space:]' '\n'

wqlqzqxt

wqlqzqxt2#

如果你有兴趣做它awk这是方式:

awk 'BEGIN{ ORS="" } { for ( i=1; i<= NF ; i++){ print $i"\n"  }  }' input.txt

字符串
此外,如果你想保持列的顺序,你可以使用这个:

awk 'BEGIN{ ORS="" } { for ( i=1; i<= NF ; i++){ dict[i]=dict[i]$i"\n"  }  } END { for (key in dict) { print dict[key] }  }' input.txt


希望有帮助!

9avjhtql

9avjhtql3#

下面是一个Perl解决方案,

$ cat globe.txt
mep_kylo_campaigns               mep_primecastaccount        mep_flightstatus
nqs                              tod_do                      gandhi_sub_data
kylo_register                    policy_record               mep_kylo_jobs
mep_note                         msg_store                   mep_feature
nqs_aside                        tbl_employee                mep_profile
$ perl -F"/\s+/"  -lane ' push(@F1,$F[0]);push(@F2,$F[1]);push(@F3,$F[2]); END { print join("\n",@F1,@F2,@F3) } ' globe.txt
mep_kylo_campaigns
nqs
kylo_register
mep_note
nqs_aside
mep_primecastaccount
tod_do
policy_record
msg_store
tbl_employee
mep_flightstatus
gandhi_sub_data
mep_kylo_jobs
mep_feature
mep_profile
$

字符串

相关问题