当行以“:”结尾时在行末添加某些字符

时间:2019-07-10 11:22:25

标签: linux shell

我有一个文本文件,其中包含两种类型的条目,如下所示:

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

3 个答案:

答案 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