如果我有不可預測的元素文件中包含空格分隔:分割空間分隔的元素被分成幾行
ABC123
ABC124
ABC125 ABC321 ABC222 ABC111 ABC333
ABC069 ABC450 ABC595
如何打印它們中的每一個單獨的行? (Python或grep的/ AWK等)
如果我有不可預測的元素文件中包含空格分隔:分割空間分隔的元素被分成幾行
ABC123
ABC124
ABC125 ABC321 ABC222 ABC111 ABC333
ABC069 ABC450 ABC595
如何打印它們中的每一個單獨的行? (Python或grep的/ AWK等)
試試這個:
如果只有空格:
tr -s ' ' '\n' < file
如果您有空格和製表符,然後根據提示按@ mklement0:
tr -s '[:blank:]' '\n' < file
OR
awk '{for (i=1;i<=NF;i++) print $i}' file
OR
egrep -o 'ABC[[:digit:]]{3}' file
OR
egrep -o '[[:alnum:]]{6}' file
謝謝! 'awk'{for(i = 1; i <= NF; i ++)print $ i}'file'爲我工作。我曾嘗試過'tr -s''\ n'
用途分:
a = '''ABC123
ABC124
ABC125 ABC321 ABC222 ABC111 ABC333
ABC069 ABC450 ABC595'''
for item in a.split():
print(item)
給出:
ABC123
ABC124
ABC125
ABC321
ABC222
ABC111
ABC333
ABC069
ABC450
ABC595
您可以使用xargs
:
xargs -n 1 < file
輸出:
ABC123
ABC124
ABC125
ABC321
ABC222
ABC111
ABC333
ABC069
ABC450
ABC595
儘管這是非常短的,它會爲每個輸入參數創建一個'/ bin/echo'子進程,效率非常低。 – mklement0
sed的命令的方法:
sed -E 's/\s+/\n/g' testfile
-E
選項,允許擴展正則表達式
AWK方法:
awk '{gsub(/ +/, "\n", $0); print}' testfile
GSUB(正則表達式,替代[,目標])
搜索目標爲最長,最左邊,不重疊匹配字符串,它可以找到的所有和 替換它們w ith 替換。該「克」在GSUB()代表「全球」, 這意味着更換 無處不在。
的grep方法:
grep -o '\S*' testfile
\S*
- 所有非空白序列匹配
好的解決方案;值得注意的是你的'sed'和'grep'命令只適用於_GNU_實現。 – mklement0
file = open("testfile.txt", "r")
for line in file:
newLine = line
newLine = newLine.replace("\n","")
newLine = newLine.split(" ")
for eachElement in newLine:
if eachElement!="" and len(eachElement)!=0:
print eachElement
注意:下面的過程輸入文件逐行所有溶液,以避免必須對整個文件加載到存儲器中,並用線內部突出部以及空間工作。
使用標準的Unix工具,在符合POSIX標準的tr
解決方案從VIPIN KUMAR's helpful answer既高效和簡單,他POSIX兼容的解決方案awk
效果很好過;更簡單的非POSIX兼容解決方案是可能的 - 見下文。
的廣義版本tr
命令的,也負責處理線內部標籤字符:
tr -s '[:blank:]' '\n' < file
使用GNUawk
或Mawk(但不是BSD/MACOS awk
) :
awk -v RS='[[:space:]]+' '1' file
使用的grep(既GNU和BSD/MACOS grep
作品):
grep -Eo '\S+' file
使用的Python(二者v2和v3):
殼牌單行(bash
,由於使用$'...'
):
python -c $'import fileinput\nfor line in fileinput.input(): print("\\n".join(line.split()))' file
在腳本:
for line in open('file'):
print("\n".join(line.split()))
使用紅寶石:
殼牌一行代碼:
ruby -ne 'puts $_.split' file
在腳本:
File.open('file').each_line do |line|
puts line.split
end
你嘗試過這麼遠嗎? – pratibha
你能不能顯示你的嘗試? –
awk'{for(i = 1; i <= NF; i ++)print $ i}'文件爲我工作。我以前試過tr -s'''\ n'<文件沒有成功。 – user1658415