【问题标题】:replace empty column with other column and add string to it用其他列替换空列并向其添加字符串
【发布时间】:2020-04-08 17:07:57
【问题描述】:

我有一个如下的 dat 文件。

1436667|disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897090|""|""|""|""|....
|disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091|""|""|||

这里“|”是字段分隔符。

我有一个场景如下。

我需要检查第一列是否为空,如果第二列不为空,我必须用第二列替换并添加一个字符串。

我尝试了类似下面的方法。

 awk -F '|' '$2 && !$1{ $1=$2 }1' Asset.csv

上述命令正在删除字段分隔符并获得不带字段分隔符的输出。如果我像下面这样添加字符串。

awk -F '|' '$2 && !$1{ $1=$2+"_ABC" }1' Asset.csv

第一列是 0。

能否请您提出方法并在第一列中添加一个字符串。

提前致谢。

【问题讨论】:

  • 假设第一个字段为空,如第二行..输出应为 .disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091_ABC|disne-2h.xco.caDIAS0000000000897089-DIAS0000000 |||
  • @anubhava:我一直在尝试使用 awk .. 它没有成功..
  • 我在下面发布了一个 awk 解决方案。请关注BEGIN{FS=OFS="|"}和单条条件+动作块。

标签: linux shell unix replace scripting


【解决方案1】:

问题清晰度不存在。

我试过这个代码来检查第一个字段是否为空,希望能有所帮助。谢谢

cat datfile

1436667 | disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897090 | “” | “” | “” | “” | .... disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091 disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091“ " ""

#!/bin/bash

VAR=`cat datfile`
#echo $VAR



IFS='|' read -r FIRST SECOND THIRD FOURTH FIFTH SIXTH SEVENTH <<< "$VAR"

echo $FIRST
echo $SECOND
echo $THIRD
echo $FOURTH
echo $FIFTH
echo $SIXTH
echo $SEVENTH



# CHECK First string is empty

if [ -z "$FIRST" ]
then
echo "\$FIRST is empty"
else
echo "\$FIRST is not empty"
fi


 ./testlab.sh
 1436667
disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897090
""
""
""
""
....disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091 disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091 "" ""
$FIRST is not empty

【讨论】:

  • 在脚本文件中,使用 IFS (delimiter |) 分割 Field (FIRST, SECOND, 等等) 中的字符串。对分配给该变量的值执行操作操作。
【解决方案2】:
awk -F '|' '$1=="" {$1=$2}; $1== $2 { $1=$1"_ABC"} ;1' OFS='|' Asset.csv

这对我有用..谢谢

如果您有更优化的解决方案,您仍然可以分享。

【讨论】:

    【解决方案3】:

    你可以使用这个解决方案:

    awk 'BEGIN{FS=OFS="|"} $1=="" && $2!=""{$1=$2 "_ABC"} 1' file
    

    1436667|disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897090|""|""|""|""|....
    disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091_ABC|disne-2h.xco.caDIAS0000000000897089-DIAS0000000000897091|""|""|||
    

    【讨论】:

      猜你喜欢
      • 2021-11-20
      • 2023-01-30
      • 2017-01-02
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-29
      • 1970-01-01
      相关资源
      最近更新 更多