我試圖在第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