标签: paste

使用另一个文件中的数据替换txt文件中特定位置的数据

我有以下格式的文本文件:

$data This is the experimental data    
good data
This is good file
datafile
1 4324 3673 6.2e+11 7687 67576
2 3565 8768 8760 5780 8778          "This is line '2'"
3 7656 8793 -3e+11 7099 79909
4 8768 8965 8769 9879 0970
5 5878 9879 7.970e-1 9070 0709799
.
.
.
100000 3655 6868 97879 96879 69899
$.endfile
Run Code Online (Sandbox Code Playgroud)

我想用来自其他两个文本文件的数据替换第 3 和第 4 列从第 '2' 行到 '100000' 的数据,这些文本文件各有一列 99999 行。

如何使用awk,sed或任何其他 unix 命令执行此操作?请注意,列分隔符是空格。

另外两个文本文件各有99999行,格式如下:

12414
12421
36347 …
Run Code Online (Sandbox Code Playgroud)

sed awk text-processing paste

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

尝试向粘贴命令添加换行符

这是尝试包含换行符的粘贴命令的弱尝试:

    paste -d -s tmp1 tmp2 \n tmp3 \n tmp4 tmp5 tmp6 > tmp7
Run Code Online (Sandbox Code Playgroud)

基本上我在每个 tmp 中有几行,我希望输出读取

First(tmp1) Last(tmp2)
Address(tmp3)
City(tmp4) State(tmp5) Zip(tmp6)
Run Code Online (Sandbox Code Playgroud)

我是否在粘贴命令中使用换行符?

这是我的成品:谢谢您的帮助!

    cp phbook phbookh2p5

    sed 's/\t/,/g' phbookh2p5 > tmp
    sort -k2 -t ',' -d tmp > tmp0
    cut -d',' -f1,2 tmp0 > tmp1
    cut -d',' -f3 tmp0 > tmp2
    cut -d',' -f4,5,6 tmp0 > tmp3
    echo "" > tmp4

    paste -d '\n' tmp1 tmp2 tmp3 tmp4 > tmp7

    sed 's/\t/ /g' tmp7 > phbookh2p5

    cat phbookh2p5 …
Run Code Online (Sandbox Code Playgroud)

bash newlines paste

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

如何粘贴多个命令的输出

我想合并两个解压缩文件f1,并f2在一个命令,像

paste (zcat f1.gz) (zcat f2.gz). 
Run Code Online (Sandbox Code Playgroud)

什么是正确的语法?

paste

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

构建表 - 根据文件名添加列

我有大量具有以下命名风格的文件:

WBM_MIROC_rcp8p5_mississippi.txt
WBM_GFDL_rcp8p5_nosoc_mississippi.txt
DBH_HADGEM_rcp4p5_co2_mississippi.txt
HMH_IPSL_rcp4p5_mississippi.txt
Run Code Online (Sandbox Code Playgroud)

这些文件表示表(其中一些具有制表符分隔符和其他一个空格分隔符),如下所示:

YEAR MONTH DAY RES
1971 1 1 1988
1971 1 2 3829
...
Run Code Online (Sandbox Code Playgroud)

我想将所有rcp8p5名称中的文件分组在一张大表中;并对rcp4p5名称中的文件执行相同操作。但是,我只想粘贴每个文件的 4 列,以避免前三列总是相同的冗余。我目前正在使用以下脚本:

ls |
awk -F_ '{ i=$1; m=$2; s=$3; u=$4;
          if(f[s]=="")add = $0;
          else add = sprintf("<(cut -f4 %s)",$0);
          f[s] = f[s] " " add }
          END{ for(insc in f)
                 printf "paste%s > out_%s.txt\n",f[insc],insc
          }' |bash
Run Code Online (Sandbox Code Playgroud)

不清楚为什么,但输出不符合预期。我有以下输出:

YEAR MONTH DAY RES YEAR MONTH DAY RES YEAR MONTH DAY RES
1971 1     1   187 1971 1 …
Run Code Online (Sandbox Code Playgroud)

awk text-processing paste

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

如何合并不同行的文件?

合并不同文件行的最快命令行方式是什么?例如,我有两个文件:

.txt:

foo  
bar
foobar
Run Code Online (Sandbox Code Playgroud)

b.txt

foo
foobar
line
by
bar
Run Code Online (Sandbox Code Playgroud)

我想得到以下输出:

foo
bar
foobar
line
by
Run Code Online (Sandbox Code Playgroud)

有没有什么快速的方法可以像上面的例子那样合并文件?(行的顺序并不重要)

awk sort paste

5
推荐指数
3
解决办法
1288
查看次数

将粘贴与行主输入一起使用

我可以通过paste如下方式从单列输入创建一个包含多列的文件:

some_command | paste - -
Run Code Online (Sandbox Code Playgroud)

some_command在以列主要格式生成数据时有效。换句话说,输入

1
2
3
4
Run Code Online (Sandbox Code Playgroud)

结果在输出

1   2
3   4
Run Code Online (Sandbox Code Playgroud)

但是,我想要相反的,即我想要

1   3
2   4
Run Code Online (Sandbox Code Playgroud)

背景:我想将M 个文件中的所有第N列收集到一个聚合文件中。我尝试通过以下方式执行此操作:

cut -f 5 "${files[@]}" | paste - - - - - …
Run Code Online (Sandbox Code Playgroud)

(与M -秒)。但如前所述,这不起作用,正如paste预期的列主要输入。我不禁认为应该有一个 coreutils(或纯 Bash)解决方案。

shell-script text-processing paste

4
推荐指数
1
解决办法
183
查看次数

剪切和粘贴命令

所以我有:

$ cat fruits
2 bananas
3 cherries
4 figs
5 dates
6 elderberries
7 apples
8 grapes
Run Code Online (Sandbox Code Playgroud)

1 $ cat prices
2 2.18
3 4.11
4 1.69
5 4.52
6 1.73
7 1.01
8 1.09
Run Code Online (Sandbox Code Playgroud)

'fruits' 中的每一行都对应于 'prices' 中的同一行。我如何使用 cut `n paste 按字母顺序对水果进行排序,以便“价格”看起来像或只是打印出以下内容:

1 1.01
2 2.18
3 4.11
4 4.52
5 1.73
6 1.69
7 1.09
Run Code Online (Sandbox Code Playgroud)

text-processing sort paste

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

linux中粘贴和标准输出的问题

我有两个要合并的文件,一个文件是:

linux$ cat temp2
linear_0_A_B linear_0_B_A
103027.244444 102714.177778
103464.311111 102876.266667
103687.422222 103072.711111
103533.244444 102967.733333
103545.066667 102916.933333
103621.555556 103027.511111
104255.776536 103006.256983
103712.178771 102877.139665
103817.555556 103198.488889
103701.422222 103133.200000
Run Code Online (Sandbox Code Playgroud)

另一个文件是:

linux$ cat temp
linear_1_A_B linear_1_B_A
118620.444444 109212.355556
108408.488889 105744.444444
108136.311111 105174.933333
108627.688889 105390.044444
108356.577778 105412.888889
108559.204420 105667.933702
108469.392265 105547.314917
109032.044693 105497.698324
108925.866667 105986.222222
107975.733333 105070.000000
Run Code Online (Sandbox Code Playgroud)

我想将 temp 中的列粘贴到 temp2 中,并像这样保留 temp2 文件:

linux$ paste temp2 temp
linear_0_A_B linear_0_B_A       linear_1_A_B linear_1_B_A
103027.244444 102714.177778     118620.444444 109212.355556
103464.311111 102876.266667     108408.488889 105744.444444
103687.422222 103072.711111     108136.311111 105174.933333
103533.244444 …
Run Code Online (Sandbox Code Playgroud)

io-redirection text-processing paste

4
推荐指数
1
解决办法
611
查看次数

两个文件中的散布行

我有一个数据文件 ( $file1),其中每个人包含两行数据。我需要穿插来自另一个数据文件 ( $file2)的第三行数据。所以我的输入看起来像:

>cat $file1
  bob  1  1  0
  bob  1  0  1
  alan 0  0  1
  alan 0  1  1

>cat $file2
 bob  a  a  b
 alan a  c  a
Run Code Online (Sandbox Code Playgroud)

所以想要的结果是:

>cat $file3
  bob  1  1  0
  bob  1  0  1
  bob  a  a  b
  alan 0  0  1
  alan 0  1  1
  alan a  c  a
Run Code Online (Sandbox Code Playgroud)

如果我只需要穿插每隔一行,我会paste像这样使用:

>paste '-d\n' $file1 $file2
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳工具是什么?我正在使用zsh.

shell-script text-processing paste

3
推荐指数
1
解决办法
675
查看次数

如何解析输入文件一次并发送到两个单独的流并并排显示?

我有以下脚本:

#!/usr/bin/env bash
# Script to generate MD5 hash for each line.
[ $# -eq 0 ] && { echo "Usage: $0 file"; exit 1; }
file=$1
shopt -s expand_aliases
alias calc_md5='while read -r line; do md5sum <<<$line; done'
paste <(sort "$file" | uniq | calc_md5) <(sort "$file" | uniq)
times
Run Code Online (Sandbox Code Playgroud)

它并排打印每行的 MD5 校验和,这正是我需要的。例如:

$ ./md5_lines.sh file.dat
5c2ce561e1e263695dbd267271b86fb8  - line 1
83e7cfc83e3d1f45a48d6a2d32b84d69  - line 2
0f2d633163ca585e5fc47a510e60f1ff  - line 3
73bb3632fc91e9d1e1f7f0659da7ec5c  - line 4
Run Code Online (Sandbox Code Playgroud)

上述脚本的问题在于它需要为每个列/流读取和解析文件两次。理想情况下,我想对所有行进行排序并使所有行都是唯一的,并且仅将其用作输入一次。

如何将上述脚本转换为仅解析一次文件 ( sort& uniq),然后将输出重定向到两个不同的流并并排显示行,以便它可以更快地处理较大的文件? …

bash io-redirection shell-script paste

3
推荐指数
2
解决办法
610
查看次数

标签 统计

paste ×10

text-processing ×6

awk ×3

shell-script ×3

bash ×2

io-redirection ×2

sort ×2

newlines ×1

sed ×1