2017-03-09 76 views
1

如果我有不可預測的元素文件中包含空格分隔:分割空間分隔的元素被分成幾行

ABC123 
ABC124 
ABC125 ABC321 ABC222 ABC111 ABC333 
ABC069 ABC450 ABC595 

如何打印它們中的每一個單獨的行? (Python或grep的/ AWK等)

+2

你嘗試過這麼遠嗎? – pratibha

+1

你能不能顯示你的嘗試? –

+0

awk'{for(i = 1; i <= NF; i ++)print $ i}'文件爲我工作。我以前試過tr -s'''\ n'<文件沒有成功。 – user1658415

回答

2

試試這個:

如果只有空格:

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 
+0

謝謝! 'awk'{for(i = 1; i <= NF; i ++)print $ i}'file'爲我工作。我曾嘗試過'tr -s''\ n' user1658415

0

用途分:

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 
0

您可以使用xargs

xargs -n 1 < file 

輸出:

ABC123 
ABC124 
ABC125 
ABC321 
ABC222 
ABC111 
ABC333 
ABC069 
ABC450 
ABC595 
+1

儘管這是非常短的,它會爲每個輸入參數創建一個'/ bin/echo'子進程,效率非常低。 – mklement0

1

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* - 所有非空白序列匹配

+0

好的解決方案;值得注意的是你的'sed'和'grep'命令只適用於_GNU_實現。 – mklement0

0
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 
0

注意:下面的過程輸入文件逐行所有溶液,以避免必須對整個文件加載到存儲器中,並用線內部突出部以及空間工作。

使用標準的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