我有一个如下的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。
请你建议一下怎么做,并在第一栏中添加一个字符串。
提前谢谢。
发布于 2019-12-16 18:23:56
问题清晰度是不存在的。
我已尝试使用此代码检查第一个字段是否为空,希望对您有所帮助。谢谢
cat datfile1436667|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发布于 2019-12-16 20:05:16
awk -F '|' '$1=="" {$1=$2}; $1== $2 { $1=$1"_ABC"} ;1' OFS='|' Asset.csv这对我很有效..谢谢
如果你有更优化的解决方案,你仍然可以分享。
发布于 2019-12-16 23:33:43
您可以使用此解决方案:
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|""|""|||https://stackoverflow.com/questions/59353190
复制相似问题