处理由许多行组成的多列文件时,我需要更改第一列中每行的名称(特别是删除已处理文件的完整路径)。以下是日志的格式:
/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列,上面例子的预期输出应该是:
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实用程序来完成此任务?
发布于 2020-10-02 23:22:05
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 :发布于 2020-10-03 00:12:57
使用GNU awk:
gawk '
BEGIN { FIELDWIDTHS = "66 6 12 6 12 6 *" }
{
sub(/.*\//, "", $1)
print $1 $3 $5 $6 $7
}
' file这可以简化一点,因为您将保留第4列之后的所有内容:
gawk -v FIELDWIDTHS="66 6 12 6 *" '{sub(/.*\//, "", $1); print $1 $3 $5}' file
# ....................1.2..3.4.5https://stackoverflow.com/questions/64174041
复制相似问题