如何多次粘贴2个文件或单个文件的内容?

时间:2017-02-19 18:52:41

标签: python shell

我在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

6 个答案:

答案 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所解释的那样,“只要添加引入缩进块的构造(如果是),就需要换行符。”

这是避免此问题的一种可能解决方案:

  1. 打开文件并将行读入列表
  2. 修改列表(使用列表推导)。对于每个项目:
    • 删除尾随换行符
    • 乘以列数
  3. 使用新行字符作为分隔符加入修改后的列表
  4. 打印联合列表并关闭文件

详细/长形式(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')