将空格分隔的元素拆分为单独的行

时间:2017-03-09 18:20:44

标签: python bash awk sed grep

如果我有一个文件,其中不可预测的元素用空格分隔,如:

ABC123
ABC124
ABC125  ABC321  ABC222  ABC111  ABC333
ABC069  ABC450  ABC595

如何在单独的行中打印每个? (python或grep / awk等)

6 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

sed 命令方法:

sed -E 's/\s+/\n/g' testfile

-E选项,允许扩展正则表达式

awk 方法:

awk '{gsub(/ +/, "\n", $0); print}' testfile
  

gsub(正则表达式,替换[,目标])
  在目标中搜索所有最长,最左边,非重叠匹配的子字符串,它可以找到并且   用替换替换它们。 gsub()中的' g '代表“全局”,   这意味着无处不在。

grep 方法:

grep -o '\S*' testfile

\S* - 匹配所有非空格序列

答案 2 :(得分: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

答案 3 :(得分:0)

您可以使用xargs

xargs -n 1 < file

输出:

ABC123
ABC124
ABC125
ABC321
ABC222
ABC111
ABC333
ABC069
ABC450
ABC595

答案 4 :(得分: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

答案 5 :(得分:0)

注意:以下所有解决方案都是逐行处理输入文件 ,以避免将整个文件加载到内存中,并使用行内部选项卡和空格。

使用标准的Unix实用程序,来自VIPIN KUMAR's helpful answer符合POSIX标准的tr解决方案 高效且简单,符合POSIX标准{{ 1}}解决方案也很有效;可以使用更简单的非POSIX兼容解决方案 - 见下文。

awk 命令的 通用版本,该版本还处理行内部标签字符:

tr

使用 GNU tr -s '[:blank:]' '\n' < file 或Mawk (但不是BSD / macOS awk):

awk

使用 grep (适用于GNU和BSD / macOS awk -v RS='[[:space:]]+' '1' file ):

grep

使用 Python (v2和v3):

Shell one-liner(grep -Eo '\S+' file ,由于使用了bash):

$'...'

在剧本中:

python -c $'import fileinput\nfor line in fileinput.input(): print("\\n".join(line.split()))' file

使用 Ruby

壳牌单线:

for line in open('file'):
  print("\n".join(line.split()))

在剧本中:

ruby -ne 'puts $_.split' file