我有几个具有格式化数据的文件。根据文件的不同,格式会有所不同。 基于此,我使用变量来定义位置,所以我只需要在我的脚本中更改变量。
我现在正在处理的脚本,我想在文件的某个位置查找数据的“存在”。如果数据存在(非空白),那么我需要拆分该数据并将该数据的一半移动到另一个部分,并将数据的后半部分移动到另一个位置。 以下是描述我正在尝试做的事情的职位和一些概念性数据。
Field_1_Position=26
Field_2_Position=41
Field_3_Position=56
Field_Length=10
当前数据:
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
---------|---------|---------|---------|---------|---------|---------|
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXXZZYYXXWWVVXXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXXMMNNOOPPQQXXXXXAABBCCDDEEZZZZZ
我的问题是(我正在调用的)字段 2。大多数情况下,这 (10) 个字符是空白的(不是此处表示的“破折号”!)。但是,如果数据确实存在,我需要采取将前五个字符放入字段 1 的前五个字符,然后我需要将字段 2 的后五个字符放入字段 3 的前五个字符。这 10 个字符为空的字段需要保留为是(虽然我想将它们保留为字段,以便我可以插入转义码来为列着色,以描绘由变量定义的字段。
期望:
1 2 3 4 5 6 7
1234567890123456789012345678901234567890123456789012345678901234567890
---------|---------|---------|---------|---------|---------|---------|
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXXZZYYX34455XXXXXZZYYXXWWVVXXXXXXWWVVCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXX1122334455XXXXX----------XXXXXAABBCCDDEEZZZZZ
201401010001AABBCCDDXXXXXMMNNO34455XXXXXMMNNOOPPQQXXXXXOPPQQCDDEEZZZZZ
感谢对此的任何想法!
--编辑以显示示例数据的实际位置编号。 KSL.
最佳答案
cat current.txt \
| awk '{
if(substr($0,41,10)=="----------") {print $0} else {
printf substr($0,1,25)substr($0,41,5)substr($0,31,5)substr($0,36,20)substr($0,46,5)substr($0,61,99)"\n"}}'
您可以将字段位置作为变量传递给 awk:
awk -v field1=26 -v field2=41 -v field3=56
关于regex - 如何根据数据的存在替换一行中的某些字符...?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24767023/