如何从一个位置切到另一个位置,如果 2 个位置在 unix 中匹配
How to cut from one position to another , if 2 positions having a match in unix
我有这样一个文件
ABCDEFGH
IJKLMNOP
QRSTUFWH
如果第 6 个位置 = F,如果第 8 个位置 = H
我要从位置2切到位置4
所以输出应该是
BCD
RST
我可以使用这个将具有匹配模式的记录保存到另一个文件中 -
grep '^.....F.H' f1.txt > f2.txt
我想要的只是位置 2 到 4 ,与模式匹配。
请帮忙
谢谢
这个 POSIX awk
应该适用于大多数系统:
awk '=="F" && =="H" {print }' FS="" file
BCD
RST
通过将字段分隔符设置为空,每个字符都变成一个字段,因此只需测试字段 6 和 8,然后打印字段 2-4。
能否请您尝试以下。
awk 'substr([=10=],6,1)=="F" && substr([=10=],8,1)=="H"{print substr([=10=],2,3)}' Input_file
由于您在问题中添加了 Solaris 标签,如果您使用的是 Solaris,请尝试将 awk
更改为 /usr/xpg4/bin/awk
。
这可能对你有用 (GNU sed):
sed -En 's/^.(...).F.H.*//p' file
模式匹配并使用分组和反向引用来提取所需的字符串。
我有这样一个文件
ABCDEFGH
IJKLMNOP
QRSTUFWH
如果第 6 个位置 = F,如果第 8 个位置 = H 我要从位置2切到位置4
所以输出应该是
BCD
RST
我可以使用这个将具有匹配模式的记录保存到另一个文件中 -
grep '^.....F.H' f1.txt > f2.txt
我想要的只是位置 2 到 4 ,与模式匹配。 请帮忙 谢谢
这个 POSIX awk
应该适用于大多数系统:
awk '=="F" && =="H" {print }' FS="" file
BCD
RST
通过将字段分隔符设置为空,每个字符都变成一个字段,因此只需测试字段 6 和 8,然后打印字段 2-4。
能否请您尝试以下。
awk 'substr([=10=],6,1)=="F" && substr([=10=],8,1)=="H"{print substr([=10=],2,3)}' Input_file
由于您在问题中添加了 Solaris 标签,如果您使用的是 Solaris,请尝试将 awk
更改为 /usr/xpg4/bin/awk
。
这可能对你有用 (GNU sed):
sed -En 's/^.(...).F.H.*//p' file
模式匹配并使用分组和反向引用来提取所需的字符串。