2017-03-09 47 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