我希望使用"awk subtring“提取一个值,它也应该计算没有任何分隔符的空格数。
例如,下面是输入,我想提取"29611",包括空格,
201903011232101029 2961104E3021 223 0 12113 5 15 8288 298233 0 45 0 39 4
我使用了这种方法,但它使用空间作为分隔符:
more abbas.dat | awk '{print substr($1,1,16),substr($1,17,25)}'
预期产出应是:
201903011232101029 2961
但它只打印
201903011232101029
我的问题是,我们如何使用"substr“来打印计算空格?
我知道,我可以使用这个命令获得所需的输出,但这对我的目标没有帮助。
more abbas.dat | awk '{print substr($1,1,16),substr($2,1,5)}'
发布于 2022-03-22 00:37:17
第一种解决方案:和您的示例一起使用,请尝试遵循awk
代码。用GNU awk
编写和测试。这里使用match
函数的awk
获得所需的输出。
To打印第一个字段,然后从第二个字段开始使用不同的空格,然后从第二个字段打印5位数字,然后使用以下方法:
awk 'match($0,/^[0-9]+[[:space:]]+[0-9]{5}/){print substr($0,RSTART,RLENGTH)}' Input_file
或在第一个字段中打印16个字母,从第二个字段打印5个字母,包括在第一个字段和第二个字段之间不同长度的空格:
awk 'match($0,/^([0-9]{16})[^[:space:]]+([[:space:]]+)([0-9]{5})/,arr){print arr[1] arr[2] arr[3]}' Input_file
第二解决方案:使用GNU grep
,考虑到您的第2列前4个所需值可以是任何值(例如:数字、字母等),请尝试如下。
grep -oP '^\S+\s+.{5}' Input_file
或在第二个字段中只匹配4个数字,在grep
上有一个小的变化。
grep -oP '^\S+\s+\d{5}' Input_file
发布于 2022-03-22 00:31:06
如果总是有一个空格,您可以使用以下命令打印第一个组,再加上第二个组的前5个字符。
注:问题中不清楚你想要4个字符还是5个字符,但这很容易调整。
more abbas.dat | awk '{print $1" "substr($2,1,5) }'
发布于 2022-03-22 00:52:33
我认为最简单的方法是在您的命令中包含"Fs“。
more abbas.dat | awk -Fs '{print substr($1,1,16),substr($1,17,25)}'
https://stackoverflow.com/questions/71568900
复制相似问题