Bash 如果目录中的文件长度不同,如何修改此awk操作?
我必须捕获目录中所有文件的第9行,并形成一个矩阵。因此,最终的结果矩阵文件应该具有该目录中每个文件的最后一列(第9列)。我试图在下面使用这个awk命令,但似乎每列的行数已经固定。但是每列应该有不同的行长度 我怎样才能做到这一点 所以我为文件创建,每个文件中有不同的行长度 测试1 测试2 测试3 测试4 我使用的命令Bash 如果目录中的文件长度不同,如何修改此awk操作?,bash,shell,awk,Bash,Shell,Awk,我必须捕获目录中所有文件的第9行,并形成一个矩阵。因此,最终的结果矩阵文件应该具有该目录中每个文件的最后一列(第9列)。我试图在下面使用这个awk命令,但似乎每列的行数已经固定。但是每列应该有不同的行长度 我怎样才能做到这一点 所以我为文件创建,每个文件中有不同的行长度 测试1 测试2 测试3 测试4 我使用的命令 awk -v OFS='\t' '{ a[FNR] = (a[FNR] ? a[FNR] FS : "") $9 } END { for(i=1;i<=FNR;i++) pri
awk -v OFS='\t' '{ a[FNR] = (a[FNR] ? a[FNR] FS : "") $9 } END { for(i=1;i<=FNR;i++) print a[i] }' $(ls test*) > test_out.txt
我希望根据每个文件的行长度,输出应该有不同的行。问题是,
END
块中的FNR
只是最后一个文件中最后一条记录的记录编号。这就是为什么输出的行数与上一个文件的行数相同。您需要保存所有文件中所有FNR
s的最大值,并在END
块的循环中使用该值
比如:
$ awk '{ if (max < FNR) max = FNR; a[FNR] = (FNR in a ? a[FNR] FS : "") $9 }
END { for(i=1;i<=max;i++) print a[i] }' test*
96.55273 9.99610 9.99310 9.99310
96.50636 9.99364 9.99213 9.99213
92.42281 9.99173 9.99051 9.99051
92.40503 9.98114 9.98874 9.98874
91.76054 9.97776 9.97663 9.97663
91.34667 9.97621 9.96515
90.97657 9.97230 9.95342
90.20087 9.96821 9.95194
90.18221 9.96497 9.94865
9.98589 9.96319 9.94749
9.95046 9.93749
9.94890 9.91189
9.94713 9.90526
9.94077 9.90311
9.93962 9.89441
9.89441
9.89124
9.88999
9.88873
9.88852
你能给我们举几个例子,每个例子有几行,比如说,三个输入文件和你想要的输出吗?@fedorqui,我不认为OP试图解析
ls
——但是用它和-v
一起列出awk要处理的文件的顺序。@jas很好,你是对的!您能提供一些示例输入和所需输出吗?到目前为止,这段代码看起来不错,但我们不知道:)好的,问题是END
块中的FNR
只是最后一个文件中最后一条记录的记录编号。这就是为什么输出的行数与上一个文件的行数相同。您需要保存所有文件中所有FNR
s的最大值,并将其用于END
block.Perfect的循环中。谢谢
chr10 79678402 79678978 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_4211 99 . 5.12172 12.22297 9.99310
chr6 91782996 91785061 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35775 99 . 5.44415 11.81448 9.99213
chr6 87337478 87340150 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35453 99 . 5.63817 11.98290 9.99051
chr1 53794676 53795323 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_257 99 . 6.10605 12.20900 9.98874
chr11 5986806 5987478 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_5727 99 . 6.43022 12.47342 9.97663
chr6 121282251 121282898 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_36549 99 . 5.21404 12.05700 9.96515
chr10 75631023 75636021 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_4005 99 . 5.22504 11.71938 9.95342
chr18 66115872 66117662 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_21569 99 . 5.24544 11.71402 9.95194
chr19 44632939 44635029 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_23305 99 . 4.50809 11.79674 9.94865
chr4 14764961 14765707 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_29038 99 . 5.76862 11.99986 9.94749
chr5 141067881 141068891 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_33753 99 . 4.88940 11.44856 9.93749
chr10 70650648 70650887 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_3871 99 . 3.28463 11.70058 9.91189
chr6 85478303 85479428 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35363 99 . 5.67223 11.88624 9.90526
chr5 24227460 24228790 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_31250 99 . 5.34013 11.81155 9.90311
chr6 87217355 87217671 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35445 98 . 4.94135 11.84741 9.89441
chr19 56822146 56823187 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_23618 98 . 4.19924 11.60634 9.89441
chr5 34353383 34353813 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_31669 98 . 5.41412 11.69552 9.89124
chr8 128343980 128344400 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_42552 98 . 5.88042 12.31357 9.88999
chr7 120101715 120103357 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_39838 98 . 5.04756 11.80500 9.88873
chr13 32095516 32096121 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_11938 98 . 5.58792 11.86071 9.88852
chr10 79678402 79678978 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_4211 99 . 5.12172 12.22297 9.99310
chr6 91782996 91785061 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35775 99 . 5.44415 11.81448 9.99213
chr6 87337478 87340150 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_35453 99 . 5.63817 11.98290 9.99051
chr1 53794676 53795323 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_257 99 . 6.10605 12.20900 9.98874
chr11 5986806 5987478 /data/GT/polycomb_project/macs2.1_out/PT1_macs2.1_out_peak_5727 99 . 6.43022 12.47342 9.97663
awk -v OFS='\t' '{ a[FNR] = (a[FNR] ? a[FNR] FS : "") $9 } END { for(i=1;i<=FNR;i++) print a[i] }' $(ls test*) > test_out.txt
96.55273 9.99610 9.99310 9.99310
96.50636 9.99364 9.99213 9.99213
92.42281 9.99173 9.99051 9.99051
92.40503 9.98114 9.98874 9.98874
91.76054 9.97776 9.97663 9.97663
$ awk '{ if (max < FNR) max = FNR; a[FNR] = (FNR in a ? a[FNR] FS : "") $9 }
END { for(i=1;i<=max;i++) print a[i] }' test*
96.55273 9.99610 9.99310 9.99310
96.50636 9.99364 9.99213 9.99213
92.42281 9.99173 9.99051 9.99051
92.40503 9.98114 9.98874 9.98874
91.76054 9.97776 9.97663 9.97663
91.34667 9.97621 9.96515
90.97657 9.97230 9.95342
90.20087 9.96821 9.95194
90.18221 9.96497 9.94865
9.98589 9.96319 9.94749
9.95046 9.93749
9.94890 9.91189
9.94713 9.90526
9.94077 9.90311
9.93962 9.89441
9.89441
9.89124
9.88999
9.88873
9.88852
$ gawk '{ a[FNR] = (FNR in a ? a[FNR] FS : "") $9 }
ENDFILE { if (max < FNR) max = FNR }
END { for(i=1;i<=max;i++) print a[i] }' test*
96.55273 9.99610 9.99310 9.99310
96.50636 9.99364 9.99213 9.99213
92.42281 9.99173 9.99051 9.99051
92.40503 9.98114 9.98874 9.98874
91.76054 9.97776 9.97663 9.97663
91.34667 9.97621 9.96515
90.97657 9.97230 9.95342
90.20087 9.96821 9.95194
90.18221 9.96497 9.94865
9.98589 9.96319 9.94749
9.95046 9.93749
9.94890 9.91189
9.94713 9.90526
9.94077 9.90311
9.93962 9.89441
9.89441
9.89124
9.88999
9.88873
9.88852