我想知道是否有人可以建议一种复制文件内容的方法,从而更改重复项?
例如文件预复制:
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
(全局)替换PATTERN
中file
给出的某些内容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
。
并使用原始输入文件cat
ed,它会生成
$ 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