【发布时间】:2017-10-09 06:29:21
【问题描述】:
如果文件中已找到两个先前的字段,我正在尝试添加一列。
我有一个包含大量条目的逗号分隔文件,我需要在两列(第二列和第七列)上找到所有匹配的行。如果两者都在多行中找到,则添加第八列,说明“共享”。
文件内容:
WPC PROD LINUX O,1808,4194304000,10,3G,4G,66314
WPC PROD LINUX O,1809,3145728000,10,3G,4G,66314
WPC PROD LINUX O,1812,4194304000,10,3G,4G,66314
WPC PROD LINUX,1808,4194304000,10,1D,2D,66314
WPC PROD LINUX,1809,3145728000,10,1D,2D,66314
WPC PROD LINUX,1812,4194304000,10,1D,2D,66314
WPCESXCS40BP01_0,1808,4194304000,10,1D,2D,66314
WPCESXCS40BP01_0,1809,3145728000,10,1D,2D,66314
WPCESXCS40BP01_0,1812,4194304000,10,1D,2D,66314
所需的输出:
WPC PROD LINUX O,1808,4194304000,10,3G,4G,66314,shared
WPC PROD LINUX O,1809,3145728000,10,3G,4G,66314,shared
WPC PROD LINUX O,1812,4194304000,10,3G,4G,66314,shared
WPC PROD LINUX,1808,4194304000,10,1D,2D,66314,shared
WPC PROD LINUX,1809,3145728000,10,1D,2D,66314,shared
WPC PROD LINUX,1812,4194304000,10,1D,2D,66314,shared
WPCESXCS40BP01_0,1808,4194304000,10,1D,2D,66314,shared
WPCESXCS40BP01_0,1809,3145728000,10,1D,2D,66314,shared
WPCESXCS40BP01_0,1812,4194304000,10,1D,2D,66314,shared
我已搜索并找到此链接Awk - matching on 2 columns for differents lines,但它并不能完全满足我的需求,它只匹配以下行。
我可以这样做:
while IFS=',' read host device blk poolnum porta portb serial
ldev_count=`cat outputtest.txt | grep -iw $device | grep -iw $serial | wc -l`
if [[ $ldev_count > 1 ]] ; then
echo "$host, $device, $blk, $poolnum, $porta, $portb, $serial, SHARED" >> semifinal.txt
else
echo "$host, $device, $blk, $poolnum, $porta, $portb, $serial" >> semifinal.txt
fi
done < outputtest.txt
但它非常慢。我希望找到更好的解决方案。
感谢您的帮助。
为格式化而编辑
【问题讨论】:
-
能否请您在此处突出显示第 2 列和第 7 列,我的意思是可能会有些混乱,因为我在您的问题中看不到这 2 列相同?能否请您突出显示它们?
-
编辑了格式以提高可读性。
-
好的,所以你是说如果列
2 & 7在任意两行之间共享(例如1808和66314),如果找到,你想将"shared"附加到末尾两条共享线路? -
正是,谢谢!