复制并更改文件内容

复制并更改文件内容

我想知道是否有人可以建议一种复制文件内容的方法,从而更改重复项?

例如文件预复制:

Nempar|EIJ87098.1  
Ecanceri|ORD93056.1

文件帖子重复:

Nempar|EIJ87098.1  
Ecanceri1|ORD93056.1  
Nempardup|EIJ87098.1  
Ecanceridup|ORD93056.1

我不需要在任何特定位置或任何特定字符进行更改。只是它标记了重复项。

目前,我只是使用:

cat file.txt file.txt > file.dup.txt

有什么方法可以在此基础上添加,还是 cat 太简单了?

答案1

尝试这个,

(cat file.txt && awk -F '|' '{print $1"dup|"$2}' file.txt) > file.dup.txt


cat file.dup.txt 

Nempar|EIJ87098.1
Ecanceri|ORD93056.1
Nempardup|EIJ87098.1
Ecanceridup|ORD93056.1

或使用 sed:

(cat file.txt && sed 's/|/dup|/g' file.txt) > file.dup.txt

答案2

您可以使用ed(全局)替换PATTERNfile给出的某些内容REPLACEMENT,然后将W结果追加( )到 的原始内容中file

给定

$ cat file
Nempar|EIJ87098.1
Ecanceri|ORD93056.1

然后

$ ed -s file << 'EOF'
,s/|/dup|/
Wq
EOF

结果

$ cat file
Nempar|EIJ87098.1
Ecanceri|ORD93056.1
Nempardup|EIJ87098.1
Ecanceridup|ORD93056.1

答案3

使用过程替换和sed

想象一下您将修改输入文件并附dup加到第一列:

$ sed 's/|/dup|/' file.txt
Nempardup|EIJ87098.1
Ecanceridup|ORD93056.1

这将替换每行中的|第一个。dup|

您可以cat使用以下形式的进程替换来修改此文件cat <(command)

$ cat <(sed 's/|/dup|/' file.txt)
Nempardup|EIJ87098.1
Ecanceridup|ORD93056.1

显然,这会产生与第一个命令相同的输出sed

并使用原始输入文件cated,它会生成

$ cat file.txt <(sed 's/|/dup|/' file.txt)
Nempar|EIJ87098.1
Ecanceri|ORD93056.1
Nempardup|EIJ87098.1
Ecanceridup|ORD93056.1

您可以像往常一样将输出重定向到另一个文件:

$ cat file.txt <(sed 's/|/dup|/' file.txt) > file.dup.txt

相关内容