我试图在第5行到5 + Y处获得列X中的值。我猜想有一个快速的方法可以用awk
执行此操作。这是如何完成的?bash命令打印行号在特定范围内的列
1
A
回答
1
我认为这会为你工作,未经测试:
awk 'NR >= 5 && NR <= 5 + Y { print $X }' file.txt
显然,替代X
和Y
一些真正的价值。
编辑:
如果X
和Y
是shell变量:
awk -v column="$X" -v range="$Y" 'NR >= 5 && NR <= 5 + range { print $column }' file.txt
0
如果“列”你的意思是你有,比如说,用逗号分隔的字段的文件,你想提取一个特定的领域,接受的答案很好地做到了。回顾一下,
awk -F , 'NR==5 { print $6 }' file
从逗号分隔文件中第5行提取第六个字段。如果您的分隔符不是逗号,请将其他参数作为参数传递给-F
选项。 (用GNU awk中,你可以通过一个正则表达式来-F
指定相当复杂的列分隔符,但如果你需要的是,去找到那个特定的情况下一个更具体的问题。)
如果“列”你的意思是一个固定的字符在一行内的位置,substr
功能就是这样做的。
awk 'NR == 5 { print substr($0, 6) }' file
打印第六列及其后的所有内容。如果要限制到一个固定的宽度,
awk 'NR == 5 { print substr($0, 6, 7) }' file
打印七个字符起始于偏移6(awk中索引从1开始,所以偏移1是线路上的第一个字符)上线5.如果你不知道到底有多少字符将被提取,但你想一个数字,用awk方便地让你从一个字符串的开始提取号码:
awk 'NR == 5 { print 0 + substr($0, 6, 7) }' file
将提取相同的7个字符,但随后强迫的结果到号码,有效地修剪任何非数字后缀,并打印。
在最一般的情况下,您可能需要对已提取的值执行进一步拆分。
awk 'NR == 5 { split(substr($0, 6), a, /:/); print a[1] }' file
将在正则表达式/:/
(在这个简单例子中,正则表达式匹配简单地文字冒号)分裂所提取的子到阵列a
。然后,我们打印第一个元素a
,这意味着我们将所有从子索引中的第一个冒号开始的所有内容从索引6开始并延伸到行号5的行尾。
(为了让您免受要查看它,$0
是整个当前的输入行,awk逐行处理一个文件,依次在每行上运行脚本的主体,如果需要将shell变量暴露给awk,awk -v awkvariable="$shellvariable"
就是这样做的。)
相关问题
- 1. 如何在特定范围内打印unicode符号?
- 2. 在bash for循环中使用命令行参数范围打印包含参数的括号
- 3. 打印给定范围内的BST键
- 4. awk中:打印特定值范围
- 5. 如何在特定范围内打印随机值?
- 6. 在特定范围内打印所有Unicode字符
- 7. Bash脚本打印命令,但不打印回显命令
- 8. 查找和打印范围使用bash
- 9. 在Alias上打印bash命令使用
- 10. 用于从特定号码打印文件的Unix命令
- 11. Python:从文本文件打印特定范围的行
- 12. 发送打印机特定命令
- 13. 如何使用bash在命令行上计算日期范围内特定文件的数量?
- 14. 命令行参数,打印列和行
- 15. 如何在范围内打印?
- 16. 在Bash或命令行中打印“ - ”x20的perl的等价物
- 17. 运行命令范围
- 18. 如何在一定范围内打印值时读取CSV文件中的特定行和列
- 19. 打印是在指定值范围内基于特定的列作为AWK对所有行
- 20. 在特定范围内剪切的Bash脚本
- 21. 命令打印来自输入的特定列
- 22. 打印范围内的所有素数
- 23. 如何打印范围内的字母?
- 24. 日期范围内的打印日期
- 25. ng范围内的重复打印数
- 26. 打印一个动态命名范围
- 27. 在特定范围内搜索特定线路的值。 Unix bash脚本
- 28. bash,sed,awk:提取范围内的行
- 29. 符号在命令行参数.. python,bash
- 30. 从命令行打印xhtml?
为'-F'分隔符添加一个参数,就完成了!:) –
只是将它们拼凑在一起(假设'X列'表示第X行字符):'awk -v FS ='''NR> = 5 && NR <= 5 +'$ Y'{print $'$ X'}'file.txt'。请注意,shell变量直接拼接到awk语句中。还好奇地注意到(至少在OS X 10.8.1上),不能通过-F选项指定_empty_字段分隔符,因此通过'-v'定义。 – mklement0
@mklement:你应该假定一列是_field_,而不是行上的_Nth_字符。虽然你可以用简单的shell变量来打破awk语句,但是在使用它们之前分配它们通常会更清晰。它也可以帮助减少重复的代码。 – Steve