ファイルの内容をコピーして重複する内容を変更する方法を提案できる人がいるかどうか疑問に思います。
たとえば、ファイルの事前コピー:
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
ここに追加する方法はありますか?それとも猫はとてもシンプルですか?
答え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