我在shell脚本中主要使用一个衬里。
如果我的文件内容如下:
1
2
3
并希望将其粘贴为:
1 1
2 2
3 3
如何使用python one liner在shell脚本中执行此操作?
PS:我尝试了以下方法: -
python -c "file = open('array.bin','r' ) ; cont=file.read ( ) ; print cont*3;file.close()"
但它打印的内容如: -
1
2
3
1
2
3
答案 0 :(得分:1)
file = open('array.bin','r' )
cont = file.readlines()
for line in cont:
print line, line
file.close()
答案 1 :(得分:0)
您可以使用以下内容替换print cont*3
:
print '\n'.join(' '.join(ch * n) for ch in cont.strip().split())
此处n
是列数。
答案 2 :(得分:0)
你需要拆分线然后重新组装:
一个班轮:
python -c "file=open('array.bin','r'); cont=file.readlines(); print '\n'.join([' '.join([c.strip()]*2) for c in cont]); file.close()"
长篇:
file=open('array.bin', 'r')
cont=file.readlines()
print '\n'.join([' '.join([c.strip()]*2) for c in cont])
file.close()
array.bin
有:
1
2
3
<强>给出:强>
1 1
2 2
3 3
答案 3 :(得分:0)
不幸的是,您不能对单线程解决方案使用简单的for语句(如上一个答案所示)。正如this answer所解释的那样,“只要添加引入缩进块的构造(如果是),就需要换行符。”
这是避免此问题的一种可能解决方案:
详细/长形式(n =列数):
f = open('array.bin', 'r')
n = 5
original = list(f)
modified = [line.strip() * n for line in original]
print('\n'.join(modified))
f.close()
一衬垫:
python -c "f = open('array.bin', 'r'); n = 5; print('\n'.join([line.strip()*n for line in list(f)])); f.close()"
答案 4 :(得分:0)
REPEAT_COUNT=3 && cat contents.txt| python -c "print('\n'.join(w.strip() * ${REPEAT_COUNT} for w in open('/dev/stdin').readlines()))"
答案 5 :(得分:0)
首先从命令propmt进行测试:
paste -d" " array.bin array.bin
编辑:
OP希望使用变量n来显示需要多少列。
有不同的方法可以重复10次命令,例如
for i in {1..10}; do echo array.bin; done
seq 10 | xargs -I -- echo "array.bin"
source <(yes echo "array.bin" | head -n10)
yes "array.bin" | head -n10
其他方式由https://superuser.com/a/86353给出,我将使用
的变体printf -v spaces '%*s' 10 ''; printf '%s\n' ${spaces// /ten}
我的解决方案是
paste -d" " $(printf "%*s" $n " " | sed 's/ /array.bin /g')