如果我有一个文件,其中不可预测的元素用空格分隔,如:
ABC123
ABC124
ABC125 ABC321 ABC222 ABC111 ABC333
ABC069 ABC450 ABC595
如何在单独的行中打印每个? (python或grep / awk等)
答案 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