为包含特定单词的每一行添加后缀
Add suffix to each lines containing specific word
我有 2 个文件:
文件 1
abc
def
ghi
jkl
file2(排序顺序可能不同)
ghi:Checked
def:Checked
我想创建一个这样的文件:
abc
def:Checked
ghi:Checked
jkl
在 shell 中有没有办法做到这一点?我不想更改我的文件 1
的排序顺序
试试这个:
#! /bin/bash
exec < file1
while read -r id; do
check=$(grep "^$id:" file2)
if (($? == 0)); then
echo "$check"
else
echo "$id"
fi
done
更新:替代实现,只读取 file2 一次。
#! /bin/bash
file2=$(grep ':Checked$' file2)
exec < file1
while read -r id; do
check=$(grep "^$id:" <<< $file2)
if (($? == 0)); then
echo "$check"
else
echo "$id"
fi
done
应该这样做:
$ join -a 1 -t: <( sort file1 ) <( sort file2 )
abc
def:Checked
ghi:Checked
jkl
我有 2 个文件:
文件 1
abc
def
ghi
jkl
file2(排序顺序可能不同)
ghi:Checked
def:Checked
我想创建一个这样的文件:
abc
def:Checked
ghi:Checked
jkl
在 shell 中有没有办法做到这一点?我不想更改我的文件 1
的排序顺序试试这个:
#! /bin/bash
exec < file1
while read -r id; do
check=$(grep "^$id:" file2)
if (($? == 0)); then
echo "$check"
else
echo "$id"
fi
done
更新:替代实现,只读取 file2 一次。
#! /bin/bash
file2=$(grep ':Checked$' file2)
exec < file1
while read -r id; do
check=$(grep "^$id:" <<< $file2)
if (($? == 0)); then
echo "$check"
else
echo "$id"
fi
done
应该这样做:
$ join -a 1 -t: <( sort file1 ) <( sort file2 )
abc
def:Checked
ghi:Checked
jkl