我有一个数据,该数据未根据适当的字段分隔符进行格式化(这是awk擅长的)。但是,我所知道的是,数据是固定宽度的。
NODE S1 S2 S3 SINT SEQV
1 0.14919 -0.58396E-001-0.71230 0.86149 0.77873
2 0.56037E-001 0.23261E-002-0.37154 0.42757 0.40341
3 0.52036E-001 0.19762E-001-0.27222 0.32426 0.30939
4 0.59765E-001 0.22059E-001-0.24529 0.30505 0.28806
5 0.70704E-001-0.51976E-002-0.13862 0.20932 0.18354
6 0.11906 0.44607E-001-0.17493 0.29399 0.26474
7 0.25540 0.95993E-002-0.43110 0.68650 0.60246
8 0.52246E-001-0.47008E-001-0.35167 0.40391 0.36456
9 0.32215E-001-0.62291E-001-0.28800 0.32021 0.28497
10 0.28072E-001-0.68269E-001-0.28304 0.31111 0.27586
11 0.25990E-001-0.78663E-001-0.28626 0.31225 0.27527
12 0.26657E-001-0.79217E-001-0.29507 0.32173 0.28400
预期的输出是这样的(其他列中的数字可以采用S2中数据其他部分的格式):
NODE S1 S2 S3 SINT SEQV
1 0.14919 -0.58396E-001 -0.71230 0.86149 0.77873
2 0.56037E-001 0.23261E-002 -0.37154 0.42757 0.40341
3 0.52036E-001 0.19762E-001 -0.27222 0.32426 0.30939
4 0.59765E-001 0.22059E-001 -0.24529 0.30505 0.28806
5 0.70704E-001 -0.51976E-002 -0.13862 0.20932 0.18354
6 0.11906 0.44607E-001 -0.17493 0.29399 0.26474
7 0.25540 0.95993E-002 -0.43110 0.68650 0.60246
8 0.52246E-001 -0.47008E-001 -0.35167 0.40391 0.36456
9 0.32215E-001 -0.62291E-001 -0.28800 0.32021 0.28497
10 0.28072E-001 -0.68269E-001 -0.28304 0.31111 0.27586
11 0.25990E-001 -0.78663E-001 -0.28626 0.31225 0.27527
12 0.26657E-001 -0.79217E-001 -0.29507 0.32173 0.28400
主要问题是,有时列之间用空格隔开,有时没有空格('-'符号占据空格),即没有适当的字段分隔符。我在这里发现了一个类似的问题,但是数据在字段分隔符方面是一致的。根据我的想法,可能有两种方法
我是AWK的新手,我知道使用其他工具可能很容易,但是我想知道是否可以使用awk分离/提取这些列。我在MacOS的终端中使用awk。
尽管JNevill和Andriy Makukha的回答就其自身权利而言是不错的选择,但我想专门使用NAWK(MacOS默认AWK)解决该问题。我发现“ FIELDWIDTHS”是gawmo的唯一功能,Grymoire machelp。
抓住是用
FS=""
将每个字符视为一个字段。由于字段的宽度相等,因此可以在知道每一列的字符数时提取每一列。例如,如果要提取第一,第二,第三和最后一列,则可以使用以下代码(如果源数据名为:test_input.txt):
awk 'BEGIN{FS=""}{print $1$2$3$4"\t"$5$6$7$8$9$10$11$12$13$14$15$16$17$18"\t"$19$20$21$22$23$24$25$26$27$28$29$30$31"\t"$59$60$61$62$63$64$65$66$67$68$69$70}' test_input.txt
输出:
NODE S1 S2 SEQV
1 0.14919 -0.58396E-001 0.77873
2 0.56037E-001 0.23261E-002 0.40341
3 0.52036E-001 0.19762E-001 0.30939
4 0.59765E-001 0.22059E-001 0.28806
5 0.70704E-001 -0.51976E-002 0.18354
6 0.11906 0.44607E-001 0.26474
7 0.25540 0.95993E-002 0.60246
8 0.52246E-001 -0.47008E-001 0.36456
9 0.32215E-001 -0.62291E-001 0.28497
10 0.28072E-001 -0.68269E-001 0.27586
11 0.25990E-001 -0.78663E-001 0.27527
12 0.26657E-001 -0.79217E-001 0.28400
这是一个简单但有些复杂的解决方案,但到目前为止,它对我来说适用于大数据。任何进一步的改进都将受到欢迎...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句