shell:根据多行格式的列模式进行处理

詹姆斯·星光

处理多行CSV文件时,我正在寻找可能的Bash Shell工作流程,该流程可能对其处理有用。这是包含多列格式数据的文件格式:

/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1000.dlg:   6 |     -4.86 |   2 |     -4.79 |   4 |####
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1001.dlg:   2 |     -5.25 |  10 |     -5.22 |   8 |########
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1002.dlg:   5 |     -5.76 |   6 |     -5.48 |   3 |###
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1003.dlg:   4 |     -3.88 |  17 |     -3.50 |   3 |###
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1009.dlg:   5 |     -4.51 |   5 |     -4.39 |   4 |####
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_100.dlg:   3 |     -4.40 |  11 |     -4.38 |   9 |#########
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_1010.dlg:   1 |     -5.07 |  15 |     -4.51 |   5 |#####
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_150.dlg:   4 |     -5.01 |   5 |     -4.82 |   3 |###
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_156.dlg:   2 |     -5.38 |  11 |     -4.70 |   3 |###
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_157.dlg:   1 |     -4.22 |  10 |     -4.16 |   7 |#######
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_167.dlg:   2 |     -3.85 |   3 |     -3.69 |   9 |#########
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_168.dlg:   2 |     -4.42 |  12 |     -4.01 |   6 |######
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_169.dlg:   2 |     -4.94 |  17 |     -4.80 |   5 |#####
/scratch_p/johnycash/results_test_docking/7000/7000_01_lig_cne_16.dlg:   1 |     -6.23 |   4 |     -5.77 |   4 |###

根据格式:|除第一列(行名)外,所有包含有价值信息的列均被除以:其余部分。该脚本应进行以下后期处理:

  1. 根据第三列的值对所有行进行降序排序(从负值到正值);
  2. 设置一些过滤器到最后一列(根据的数目#),丢弃所有包含的行######或者,可以在倒数第二列上应用此过滤器,该列将#字符数表示为数字。

虽然我可以使用sort做第一个任务

sort -t '|' -k 3 filename.csv

第二个可以使用AWK实现

awk '(NR>1) && ($8 > 2) ' filename.csv > filename_processed.txt

考虑到文件格式,我如何才能高效地组合这两个命令?

RavinderSingh13

您可以尝试在GNU的示例中进行跟踪,编写和测试awk

awk '
BEGIN{
  FS=OFS="|"
}
gsub(/#/,"&",$6)>4
' Input_file | sort -t'|' -nk 3 > output_file


编辑:根据OP的注释,可以从Input_file的开头获取最后10%的行,然后将上面命令的输出带到输出文件中,然后可以运行。

awk -v lines="$(wc -l < output_file)" '
BEGIN{
  tenPer=int(lines/10)
}
FNR>(tenPer){exit}
1
' output_file

为了获得output_file的最后几行,请尝试:

tac output_file | 
awk -v lines="$(wc -l < output_file)" 'BEGIN{tenPer=int(lines/10)} FNR>tenPer{exit} 1' | 
tac

要么

awk -v lines="$(wc -l < output_file)" 'BEGIN{tenPer=int(lines/10)} FNR>=(lines-tenPer)' output_file

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

shell:根据名称中的模式进行文件管理

来自分类Dev

根据起始前缀从文本文件中读取多行作为记录,然后对其进行处理

来自分类Dev

根据标题的值对列进行条件格式化

来自分类Dev

Powershell脚本根据模式匹配插入多行

来自分类Dev

根据列值选择多行

来自分类Dev

根据模式选择列

来自分类Dev

蜂巢-将分隔的列拆分为多行,根据位置进行选择

来自分类Dev

蜂巢-将分隔的列拆分为多行,根据位置进行选择

来自分类Dev

根据启动模式进行配置

来自分类Dev

使用 AND (OR) 根据多行值进行选择

来自分类Dev

MySQL:根据数量列选择多行

来自分类Dev

根据列A在R中合并多行

来自分类Dev

根据第一列合并多行

来自分类Dev

根据列数据将Excel排成多行

来自分类Dev

根据列将单行拆分为多行

来自分类Dev

每次都根据前几列对所有与模式匹配的列进行突变

来自分类Dev

如何使用Vim根据模式将文本分成多行?

来自分类Dev

根据模式索引CSV列

来自分类Dev

将R转换为宽格式,并根据列中的值进行排列

来自分类Dev

根据记录语法进行模式匹配

来自分类Dev

如何根据特定模式对行进行grep?

来自分类Dev

根据行模式对行进行排序

来自分类Dev

如何根据特定模式对行进行grep?

来自分类Dev

根据行模式对行进行排序

来自分类常见问题

使用Shell脚本在指定模式后将多行插入文件

来自分类Dev

根据多种条件进行格式化

来自分类Dev

带SHELL = / usr / bin / R的Makefile:处理多行

来自分类Dev

在shell中使用模式匹配进行解析

来自分类Dev

使用模式在Shell脚本中进行wget