首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多列文件的bash处理

多列文件的bash处理
EN

Stack Overflow用户
提问于 2020-10-02 23:14:15
回答 2查看 39关注 0票数 0

处理由许多行组成的多列文件时,我需要更改第一列中每行的名称(特别是删除已处理文件的完整路径)。以下是日志的格式:

代码语言:javascript
复制
/scratch_p/john/results_test_docking/7000/7000_12_lig_cne_767.dlg:   2 |    -10.50 |  10 |    -10.38 |  16 |################
/scratch_p/john/results_test_docking/7000/7000_08_lig_cne_767.dlg:   1 |    -10.41 |  11 |    -10.34 |  11 |###########
/scratch_p/john/results_test_docking/7000/7000_08_lig_cne_998.dlg:   1 |     -9.89 |   1 |     -9.34 |   7 |#######
/scratch_p/john/results_test_docking/7000/7000_06_lig_cne_998.dlg:   2 |     -9.64 |  12 |     -9.39 |   6 |######
/scratch_p/john/results_test_docking/7000/7000_04_lig_cne_900.dlg:   1 |     -9.62 |  12 |     -8.95 |  11 |###########
/scratch_p/john/results_test_docking/7000/7000_05_lig_cne_767.dlg:   1 |     -9.37 |  20 |     -9.13 |   5 |#####
/scratch_p/john/results_test_docking/7000/7000_08_lig_cne_331.dlg:   1 |     -9.31 |   8 |     -8.29 |   6 |######
/scratch_p/john/results_test_docking/7000/7000_12_lig_cne_900.dlg:   1 |     -9.16 |   8 |     -8.82 |   8 |########
/scratch_p/john/results_test_docking/7000/7000_08_lig_cne_818.dlg:   1 |     -9.12 |   3 |     -8.35 |   5 |#####
/scratch_p/john/results_test_docking/7000/7000_10_lig_cne_587.dlg:   1 |     -9.07 |  19 |     -8.50 |  10 |##########
/scratch_p/john/results_test_docking/7000/7000_09_lig_cne_515.dlg:   1 |     -9.02 |  12 |     -7.93 |   7 |#######
/scratch_p/john/results_test_docking/7000/7000_07_lig_cne_987.dlg:   1 |     -9.00 |  16 |     -8.77 |   8 |########
/scratch_p/john/results_test_docking/7000/7000_04_lig_cne_767.dlg:   2 |     -8.96 |   9 |     -8.88 |   8 |########
/scratch_p/john/results_test_docking/7000/7000_12_lig_cne_331.dlg:   1 |     -8.94 |  11 |     -8.54 |   9 |#########
/scratch_p/john/results_test_docking/7000/7000_10_lig_cne_331.dlg:   1 |     -8.90 |   1 |     -8.49 |   6 |######
/scratch_p/john/results_test_docking/7000/7000_10_lig_cne_767.dlg:   4 |     -8.87 |   4 |     -8.86 |  14 |##############

在这里,我应该从每一行的第一列中删除/scratch_p/john/result_test_docking/7000/(模式通常在每行之间共享,但在不同的日志中可能是不同的...),因此只保留.dlg文件的名称。然后我应该去掉第2,4列,上面例子的预期输出应该是:

代码语言:javascript
复制
7000_12_lig_cne_767.dlg:     -10.50 |      -10.38 |  16 |################
7000_08_lig_cne_767.dlg:     -10.41 |      -10.34 |  11 |###########
7000_08_lig_cne_998.dlg:      -9.89 |       -9.34 |   7 |#######
7000_06_lig_cne_998.dlg:      -9.64 |       -9.39 |   6 |######
7000_04_lig_cne_900.dlg:      -9.62 |       -8.95 |  11 |###########
7000_05_lig_cne_767.dlg:      -9.37 |       -9.13 |   5 |#####
7000_08_lig_cne_331.dlg:      -9.31 |       -8.29 |   6 |######
7000_12_lig_cne_900.dlg:      -9.16 |       -8.82 |   8 |########
7000_08_lig_cne_818.dlg:      -9.12 |       -8.35 |   5 |#####
7000_10_lig_cne_587.dlg:      -9.07 |       -8.50 |  10 |##########
7000_09_lig_cne_515.dlg:      -9.02 |       -7.93 |   7 |#######
7000_07_lig_cne_987.dlg:      -9.00 |       -8.77 |   8 |########
7000_04_lig_cne_767.dlg:      -8.96 |       -8.88 |   8 |########
7000_12_lig_cne_331.dlg:      -8.94 |       -8.54 |   9 |#########
7000_10_lig_cne_331.dlg:      -8.90 |       -8.49 |   6 |######
7000_10_lig_cne_767.dlg:      -8.87 |       -8.86 |  14 |##############

唯一可能的方法是在文本编辑器中进行手动编辑:-)。是否可以使用某个bash实用程序来完成此任务?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-02 23:22:05

代码语言:javascript
复制
cat test.txt |                         # get the file content
cut -d '|' -f 1,2,4- |                 # pick the columns we want
sed 's/^.*\/\([^/]*.dlg\):[^|]*/\1/'   # extract filename (ignoring path) and ignore first column after :
票数 1
EN

Stack Overflow用户

发布于 2020-10-03 00:12:57

使用GNU awk:

代码语言:javascript
复制
gawk '
  BEGIN { FIELDWIDTHS = "66 6 12 6 12 6 *" }
  {
     sub(/.*\//, "", $1)
     print $1 $3 $5 $6 $7
  }
' file

这可以简化一点,因为您将保留第4列之后的所有内容:

代码语言:javascript
复制
gawk -v FIELDWIDTHS="66 6 12 6 *" '{sub(/.*\//, "", $1); print $1 $3 $5}' file
# ....................1.2..3.4.5
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64174041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档