如果我有不可预测的元素文件中包含空格分隔:分割空间分隔的元素被分成几行
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