我有一个文本文件,其中包含两种类型的条目,如下所示:
398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:
我想在不存在“ / opt / Check / D1 / test_1237”的行的末尾添加NA,这意味着该行以“:”结尾。
请让我知道该怎么做。
我试图这样做
if grep -q "test" "/home/C1.txt"; then
awk '$0=$0"NA"' /home/C1.txt > /home/C2.txt
else
:
fi
但是这会将NA添加到每行。.我想将NA添加到以“:”结尾的行。
输出应如下所示:
398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:NA
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:NA
答案 0 :(得分:2)
您可以使用此sed
:
sed 's/:$/&NA/' file
398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:NA
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:NA
这里:
:$
:在行尾之前匹配:
&NA
:替换为原始匹配的字符串,即:
和NA
答案 1 :(得分:2)
尝试以下命令:
sed 's/:$/:NA/' filename
仅当行以:
结尾时,这会将:NA
替换为:
。
答案 2 :(得分:0)
我希望使用sed答案,因为它会跳过文件重定向。但是正如您问的awk一样,这是awk的操作方式。
在这里,您需要添加NA,以检查是否以:结尾的行 在awk中执行的一种方法是检查以:(即:$)结尾的行,如果是,则添加NA,next用于跳过下一个代码块。
$ awk '/:$/{print $0 "NA"; next} {print $0}'
398/GHJKI:/opt/Check/D1/test_1234
875/GHgbhn:/opt/Check/D1/test_1235
398/ANgbhn:NA
398/ABNHJ:/opt/Check/D1/test_1237
123/ANgbhn:NA