我有一个包含三个不同列的文本文件。我想通过将所有这些列合并为一个列来创建另一个文件。
我的文件看起来像这样
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
答案 0 :(得分:3)
这是一种方法,但是顺序不同:
$ cat file | tr -s ' ' '\n'
mep_kylo_campaigns
mep_primecastaccount
mep_flightstatus
...
更新:由于建议猫的无用使用,这是另一种形式:
$ < file tr -s ' ' '\n'
答案 1 :(得分:2)
如果您对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
希望有帮助!
答案 2 :(得分:1)
这是一个维护订单的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
$