下面是应从特定行和特定位置复制数据的文件
CP I ({010010010010010010010010010010}000 000) 234764-CTS_fsdfs_a_inv_33ghf/ZN
--- I ({111100011111100000000000011100}111 111) 2518255-
Q O ({001111100011111100000000000011}111 **1**11) 2520618-
AP I ({010010010010010010010010010010}010 010) 23499764-fdsf_ccl_a_inv_3330gg/XX
--- I ({111111111111111111111100000011}000 000) 2518255-
Q O ({011111110011111111111111100000}000 **0**00) 2909918-
QP I ({110010010010010010010010010010}010 010) 234764-ZZZ_ccl_a_inv_33305/ZZ
--- I ({111111111111111111111100000011}000 000) 2518255-
Q O ({011111111111111111111111100000}000 **1**11) 2599918-
注意:原始文件中不存在 **,它只是为了帮助识别要打印到新文件中的数字
我必须只打印 Q 行的粗体字母。并将内容逐行保存到新文件中。并且请建议一些没有 $3 类型命令的代码,因为在使用带有 $3 的 awk 命令时它会给出如下错误:
can't read "3": no such variable
非常感谢您的帮助
答案1
你可以尝试这样的事情:
awk '$1=="Q"{split($4,a,""); print a[1]}' input_file >new_file
这个想法是split
对自己元素中的每个字符使用空分隔符。
另外按照建议您可以使用
awk '$1=="Q"{print substr($4,1,1)}' input_file >new_file
答案2
假设没有任何行有任何初始空格(问题中的行似乎在开头有可变数量的空格,但我假设这是由于不小心的复制和粘贴)并且格式以其他方式固定关于字段的宽度等:
$ cut -c 1,2,51 file | sed -n 's/^Q //p'
1
0
1
这会从每行中提取前两个字符和第 51 个字符。前两个字符用于sed
确定要输出的行(删除前两个字符后)。第 51 个字符是您要查找的数字。
或者(可能更简单),使用grep
and cut
:
$ grep '^Q ' file | cut -c 51
1
0
1
在这里,使用 提取有趣的行grep
,然后使用 提取每行中的第 51 个字符cut
。同样,这仅在文件格式具有固定宽度字段且没有初始空格的情况下才有效。