【问题标题】:How to merge multiple columns in a file to a single column using bash commands? [duplicate]如何使用 bash 命令将文件中的多列合并为单列? [复制]
【发布时间】:2018-12-10 13:24:50
【问题描述】:

我有一个包含三个不同列的文本文件。我想通过将所有这些列合并到一个列中来创建另一个文件。

我的文件是这样的

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

【问题讨论】:

  • 首先使用ls -1获取列表?
  • ls -l 列出所有文件,在我的情况下,我有一个包含 3 列的文件,我想将它合并到单列中。我试过 awk 命令无法弄清楚。谢谢

标签: linux bash sh


【解决方案1】:

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

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

更新:这里建议使用 cat 无用的另一种形式:

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

【讨论】:

  • 为什么猫没用?试试&lt; file tr -s ' ' '\n'
  • @socowi 有效。我试过这个例如
【解决方案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

希望对你有帮助!

【讨论】:

    【解决方案3】:

    这是一个维护秩序的 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
    $
    

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 2011-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2014-04-08
      • 1970-01-01
      相关资源
      最近更新 更多