标签: paste

选择每个文件的某一列,粘贴到一个新文件

我有 20 个具有相同行数的制表符分隔文件。我想选择每个文件的第 4 列,粘贴到一个新文件中。最后,新文件将有 20 列,每列来自 20 个不同的文件。

如何使用 Unix/Linux 命令执行此操作?

输入,20 个相同格式。我希望文件 1 的第 4 列在此处表示为 A1:

chr1    1734966 1735009 A1       0       0       0       0       0       1       0
chr1    2074087 2083457 A1       0       1       0       0       0       0       0
chr1    2788495 2788535 A1       0       0       0       0       0       0       0
chr1    2821745 2822495 A1       0       0       0       0       0       1       0
chr1    2821939 2822679 A1       1       0       0       0       0       0       0
...
Run Code Online (Sandbox Code Playgroud)

输出文件,有 20 列,每列来自 …

text-processing columns paste

7
推荐指数
1
解决办法
2万
查看次数

是否有命令可以执行粘贴命令的相反操作?

paste命令可以将多行合并为一行。例如,如果我有一个文件test.txt并且它包含:

原文

a
aa
aaa
b
bb
bbb
c
cc
ccc
Run Code Online (Sandbox Code Playgroud)

我可以使用命令paste -s -d '\t\t\n' test.txt来获取:

处理结果

a   aa  aaa
b   bb  bbb
c   cc  ccc
Run Code Online (Sandbox Code Playgroud)

我想知道是否有反向命令可以执行粘贴的反向操作。例如,如果我有“处理结果”,我怎样才能得到“原始文本”?

text-processing paste

7
推荐指数
1
解决办法
3347
查看次数

如何垂直合并文本文件?

假设我有两个文本文件 a、b。

$cat a
a a
a a
a a

$cat b
b b
b b
b b
Run Code Online (Sandbox Code Playgroud)

然后,我想使用粘贴垂直合并这两个文件。合并后的文件如下所示

a a
a a
a a
b b
b b
b b
Run Code Online (Sandbox Code Playgroud)

不是

$paste a b > AB
$cat AB
a a b b
a a b b
a a b b
Run Code Online (Sandbox Code Playgroud)

paste

7
推荐指数
1
解决办法
2万
查看次数

如何使“粘贴”命令停止在最短的文件上

我有两个文件:

a.txt

1
2
3
Run Code Online (Sandbox Code Playgroud)

b.txt

foo
bar
baz
qux
Run Code Online (Sandbox Code Playgroud)

跑步paste a.txt b.txt给予

1 foo 
2 bar 
3 baz 
 qux 
Run Code Online (Sandbox Code Playgroud)

但是,我想在最短的文件结束时停止(也就是说,我只想打印完整的行,否则管道中的后续程序会认为qux第一个字段是第二个字段,而实际上这是唯一的方法)。我怎样才能做到这一点?

command-line paste

7
推荐指数
1
解决办法
649
查看次数

在保持对齐的同时并排合并两个 ASCII 艺术文件的正确方法是什么?

艺术文件(cat -A输出):

 .::""-,                      .::""-.$
/::     \                    /::     \$
|::     |   _..--""""--.._   |::     |$
'\:.__ /  .'              '.  \:.__ /$
 ||____|.' _..---"````'---. '.||____|$
 ||:.  |_.'                `'.||:.  |$
 ||:.-'`       .-----.        ';:.  |$
 ||/         .'       '.        \.  |$
 ||         / '-.   '. \\       |.  |$
 ||:.     _| '   \_\_\\/(        \  |$
 ||:.\_.-' )     ||   m `\.--._.-""-;$
 ||:.(_ . '\ __'// m ^_/ /    '.   _.`.$
 ||:.  \__^/` _)```'-...'   _ .-'.'    '-.$
 ||:..-'__  .'        '. . '      '.      `'.$
 ||:(_.' .`'        _. …
Run Code Online (Sandbox Code Playgroud)

linux paste ascii-art pr

7
推荐指数
1
解决办法
820
查看次数

在两列中打印两个文件

我想在两列中打印两个文件——第一个文件在左侧,第二个文件在右侧。

paste 不做这项工作,因为它只能插入一个字符作为分隔符,所以如果第一个文件行的长度不同,输出将被扭曲:

$ cat file1
looooooooong line
line
$ cat file2
hello
world
$ paste file1 file2
looooooooong line   hello
line    world
Run Code Online (Sandbox Code Playgroud)

如果这是一个添加尾随空格的命令,fmt --add-spaces --width 50问题将得到解决:

$ paste <(fmt --add-spaces --width 50 file1) file2
looooooooong line                                 hello
line                                              world
Run Code Online (Sandbox Code Playgroud)

但我不知道一个简单的方法来做到这一点。

那么如何在不扭曲的情况下水平合并打印多个文件呢?其实,我只是想同时看它们。


UPD:添加尾随空格的命令确实存在(例如,xargs -d '\n' printf '%-50s\n'

但解决方案如

$ paste <(add-trailing-spaces file1) file2
Run Code Online (Sandbox Code Playgroud)

当 file1 的行数少于 file2 时,它不会按预期工作。

command-line paste text-formatting

6
推荐指数
2
解决办法
7547
查看次数

如何在 sh 中并排列中打​​印多行变量?

这个问题基于Ask\xe2\x80\xafUbuntu 上的 \xc2\xa0similar 问题,\n但不是bash,我\xc2\xa0 希望在 中获得类似的输出sh

\n

bash 中没有问题;它按预期工作。

\n
wolf@linux:~$ echo $SHELL\n/usr/bin/bash\nwolf@linux:~$ \nwolf@linux:~$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\nwolf@linux:~$ \nwolf@linux:~$ varB=\'04:25\n> 03:39\n> 10:06\'\nwolf@linux:~$ \nwolf@linux:~$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\nwolf@linux:~$\nwolf@linux:~$ paste <(printf %s "$varA") <(printf %s "$varB")\nAug 01  04:25\nAug 16  03:39\nAug 26  10:06\nwolf@linux:~$\n
Run Code Online (Sandbox Code Playgroud)\n

但是,当我在 中尝试类似的命令时sh,我收到以下错误。

\n
wolf@linux:~$ sh\n$ \n$ varA=\'Aug 01\n> Aug 16\n> Aug 26\'\n\n$ varB=\'04:25\n> 03:39\n> 10:06\'\n$ \n$ echo "$varA $varB"\nAug 01\nAug 16\nAug 26 04:25\n03:39\n10:06\n$ \n$ paste <(printf …
Run Code Online (Sandbox Code Playgroud)

shell bash text-processing columns paste

6
推荐指数
1
解决办法
2650
查看次数

UNIX 粘贴列并为所有缺失值插入零

我想合并包含不同行数但列数相同的两个 txt 文件中的特定列(如下所示):

  file1:
  xyz   desc1   12
  uvw   desc2   55
  pqr   desc3   12

  file2:
  xyz   desc1   56
  uvw   desc2   88


  Preferred output:
  xyz   desc1   12  56
  uvw   desc2   55  88
  pqr   desc3   12   0
Run Code Online (Sandbox Code Playgroud)

目前我使用 awk 作为粘贴命令:

  paste <(awk '{print $1}' file1) <(awk '{print $2}' file1) <(awk '{print $3}' file1) <(awk '{print $3}' file2) 
Run Code Online (Sandbox Code Playgroud)

但这似乎只合并重叠的列。awk 中有没有办法插入零而不是省略行本身?

我需要将 100 个文件组合在一起,这样我的输出文件将包含 102 列。

awk text-processing paste

5
推荐指数
1
解决办法
1989
查看次数

根据可能不完整的键合并文件

我想合并两个文件,例如如何根据两列的匹配合并两个文件?但一个文件可能无法包含所有结果。例如

文件1

1 dog
2 cat
3 fox
4 cow
Run Code Online (Sandbox Code Playgroud)

文件2

1 woof
2 meow
4 mooh
Run Code Online (Sandbox Code Playgroud)

想要的输出

1 dog woof
2 cat meow
3 fox
4 cow mooh
Run Code Online (Sandbox Code Playgroud)

text-processing merge paste

5
推荐指数
2
解决办法
344
查看次数

将 csv 中的许多值四舍五入到小数点后 3 位(printf ?)

我有一个像这样的粘贴命令 paste -d , file1.csv file2.csv file3.csv

file2.csv 包含这样的数字

0.2
0.3339
0.111111
Run Code Online (Sandbox Code Playgroud)

我希望 file2.csv 中的值具有 3 位小数,如下所示:

0.200
0.334
0.111
Run Code Online (Sandbox Code Playgroud)

对于一个值,这是有效的:

printf "%.3f" "0.3339"->0.334

但对于 file2.csv 中的多个值,这不起作用:

paste -d , file1.csv <(printf %s "%.3f" "$(< file2.csv)") file3.csv

也许有一个好的解决方案?

csv printf paste

5
推荐指数
2
解决办法
906
查看次数